2009-10-25 130 views
4

我使用eclipse hibernate插件中內置的反向工程功能爲每個表生成dao和hbm.xml文件。使用eclipse Hibernate插件的問題 - 在JNDI中找不到sessionfactory

它很好,但是當我嘗試使用生成的對象時,我得到一個無法找到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

我也面臨着同樣的問題。你有沒有擺脫這個問題?如果是的話,請讓我們知道解決方案.... – 2012-08-29 12:33:43

回答

3

您可以指定所有的連接,密碼,用戶名等直接在Hibernate的配置文件,然後加載使用如下代碼:

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

或者,您可以從JNDI獲取它。這允許您的系統管理員在部署之後通過使用JNDI註冊不同的SessionFactory來更改連接,密碼,用戶名等。

您需要查閱應用程序服務器的文檔,瞭解如何使用應用程序服務器指定JNDI資源。

0

內buildsessionfactory方法的初始化initialcontext.pass在獲取會話工廠方法SessionFactory的JNDI名稱(即在查找)

相關問題