使用eclipse Hibernate插件的问题 - 无法定位的JNDI SessionFactor

2019-09-01 02:25发布

我使用内置在Eclipse Hibernate插件生成DAO的和hbm.xml文件中每个表的逆向工程能力。

它确实是非常好,但是当我尝试使用生成的对象,我得到的JNDI错误无法找到的SessionFactory。

我看到提示,当您在命名hibernate.cfg.xml文件SessionFactory的所以我删除名称标记,我仍然得到同样的错误发生这种情况后。

这是我的hibernate.cfg.xml

    <?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <property name="hibernate.bytecode.use_reflection_optimizer">false</property>
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="hibernate.connection.password">qwerty</property>
        <property name="hibernate.connection.url">jdbc:mysql://127.0.0.1:3306/agilegroup3</property>
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.default_catalog">agilegroup3</property>
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>
        <mapping resource="generated/Usersroles.hbm.xml" />
        <mapping resource="generated/Role.hbm.xml" />
        <mapping resource="generated/Logdata.hbm.xml" />
        <mapping resource="generated/Logtrigger.hbm.xml" />
        <mapping resource="generated/User.hbm.xml" />
    </session-factory>
</hibernate-configuration>

这是生成的代码触发异常

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");
    }
}

我不知道很多关于JNDI,但我想它的某种查找当量的一个配置文件。 我不想使用JNDI,但我不知道如何使用Eclipse撑着实现这一目标。

更改生成的代码不会真正帮助我,因为我需要保持在某些点进行再生,所以如果任何人都可以解释为什么/这是怎么发生的,什么我可以做这件事我会很感激

谢谢

乔纳森

Answer 1:

您可以直接指定所有的连接,密码,用户名等在Hibernate的配置文件,然后加载使用如下代码:

Configuration cfg = new Configuration();
cfg.configure();
SessionFactory sf = cfg.buildSessionFactory();

或者,你可以从JNDI获得。 这允许你的系统管理员更改连接,密码,部署后的用户名等,通过注册使用JNDI不同的SessionFactory。

您需要咨询您的应用程序服务器上的文件如何与应用程序服务器指定JNDI资源。



Answer 2:

里面buildsessionfactory方法的初始化initialcontext.pass在获取会话工厂方法SessionFactory的JNDI名称(即查找)



文章来源: Problems using eclipse Hibernate plugin - could not locate sessionfactory in JNDI