使用eclipse Hibernate插件的问题 - 无法在JNDI中找到sessionfactory

时间:2009-10-25 10:51:44

标签: hibernate eclipse-plugin jndi sessionfactory

我正在使用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插件实现这一点。

更改生成的代码不会真正帮助我,因为我需要在某些时候继续重新生成它,所以如果有人能解释为什么/如何发生这种情况以及我能做些什么我将不胜感激

由于

乔纳森

2 个答案:

答案 0 :(得分:3)

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

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

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

您需要查阅应用程序服务器的文档,了解如何使用应用程序服务器指定JNDI资源。

答案 1 :(得分:0)

在buildsessionfactory方法内部初始化initialcontext.pass在get session工厂方法中的sessionfactory jndi名称(即在查找中)