Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 变得严重:获取SessionFactory时无法在JNDI中找到SessionFactory_Java_Hibernate_Maven_Eclipse Plugin_Hbm2java - Fatal编程技术网

Java 变得严重:获取SessionFactory时无法在JNDI中找到SessionFactory

Java 变得严重:获取SessionFactory时无法在JNDI中找到SessionFactory,java,hibernate,maven,eclipse-plugin,hbm2java,Java,Hibernate,Maven,Eclipse Plugin,Hbm2java,我使用hibernate作为持久层与数据库通信。我使用maven插件hbm2java生成dao、java、*hbm.xml和hibernate.cfg.xml。到那时插件还可以正常工作 但当我试图与db通信时,它给出了以下异常 Aug 30, 2012 1:45:46 PM org.hbm2dao.AssemblyHome getSessionFactory SEVERE: Could not locate SessionFactory in JNDI javax.naming.NoInitia

我使用hibernate作为持久层与数据库通信。我使用maven插件hbm2java生成dao、java、*hbm.xml和hibernate.cfg.xml。到那时插件还可以正常工作

但当我试图与db通信时,它给出了以下异常

Aug 30, 2012 1:45:46 PM org.hbm2dao.AssemblyHome getSessionFactory
SEVERE: Could not locate SessionFactory in JNDI
javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file:     java.naming.factory.initial
at javax.naming.spi.NamingManager.getInitialContext(Unknown Source)
at javax.naming.InitialContext.getDefaultInitCtx(Unknown Source)
at javax.naming.InitialContext.getURLOrDefaultInitCtx(Unknown Source)
at javax.naming.InitialContext.lookup(Unknown Source)
at org.hbm2dao.AssemblyHome.getSessionFactory(AssemblyHome.java:29)
at org.hbm2dao.AssemblyHome.<init>(AssemblyHome.java:24)
at com.myhadoop.app.App.main(App.java:22)
java.lang.IllegalStateException: Could not locate SessionFactory in JNDI
at org.hbm2dao.AssemblyHome.getSessionFactory(AssemblyHome.java:33)
at org.hbm2dao.AssemblyHome.<init>(AssemblyHome.java:24)
at com.myhadoop.app.App.main(App.java:22)
Exception in thread "main" java.lang.NullPointerException
at com.myhadoop.app.App.main(App.java:32)
我发现了类似的疑问

然而,将插件生成的400多个类更改为从*Home.java获取会话工厂是不可行的

如何在不更改400多个类的情况下使用hibernate插件解决这个问题


我不想使用任何web/app服务器这是我的独立应用程序。

使用生成的
getSessionFactory()
方法只有在您设置了环境,以便
InitialContext
可以找到您的
hibernate.cfg.xml
文件时才能工作,而且听起来好像无法


您可以通过按照正确设置
InitialContext
和您的环境来解决该问题。作为替代方案,您可以通过更改
getSessionFactory
方法来完全删除JNDI,只需创建一个,并告诉它映射文件的位置。

下面是我针对类似问题发布的答案
<session-factory name="SessionFactory">
private final SessionFactory sessionFactory = getSessionFactory();

protected SessionFactory getSessionFactory() {
    try {

        return (SessionFactory) new InitialContext().lookup("SessionFactory");
    }
    catch (Exception e) {
        log.error("Could not locate SessionFactory in JNDI", e);
        throw new IllegalStateException("Could not locate SessionFactory in JNDI");
    }
}