我正在使用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插件实现这一点。
更改生成的代码不会真正帮助我,因为我需要在某些时候继续重新生成它,所以如果有人能解释为什么/如何发生这种情况以及我能做些什么我将不胜感激
由于
乔纳森
答案 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名称(即在查找中)