程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Hibernate的配置文件詳解

Hibernate的配置文件詳解

編輯:關於JAVA

Hibernate的配置文件,默認的有2個:hibernate.properties,hibernate.cfg.xml,這二者,可選其一,也可以合並使用。如果存在對相同屬性的定義,xml文件會覆蓋properties文件的相關內容,“Hibernate In Action"上是這麼說的。

這幾天,碰到一個問題,那就是,本站有好幾個webapp都開始使用Hibernate,如果bbs.war先發布沒事,但是如果blog.war先發布,則bbs除了與blog公用的在線用戶,其它什麼都無法從數據庫中讀取。

看日志,知道是因為這種發布順序,則bbs.war中的Forum.cfg.xml、Thread.cfg.xml之類,都沒有起作用。為什麼會這樣呢?

原來這2個包都使用了hibernate.cfg.xml,並且在HibernateUtil中未使用其它的方式都顯式地調用hibernate配置文件。

package token;
import net.sf.hibernate.*;
import net.sf.hibernate.cfg.*;
public class HibernateUtil {
private static final SessionFactory sessionFactory;
static {
try {
/* 方法一 */
// sessionFactory = new Configuration().configure().buildSessionFactory();
/* 方法二 */
/* sessionFactory = new Configuration()
.addClass(Counter.class)
.addClass(Online.class)
.buildSessionFactory();
*/
/* 方法三 */
sessionFactory = new Configuration().configure("/token.cfg.xml").buildSessionFactory();
} catch (HibernateException ex) {
throw new RuntimeException("Exception building SessionFactory: "
+ ex.getMessage(), ex);
}
}
public static final ThreadLocal session = new ThreadLocal();
public static Session currentSession() throws HibernateException {
Session s = (Session) session.get();
// Open a new Session, if this Thread has none yet
if (s == null) {
s = sessionFactory.openSession();
session.set(s);
}
return s;
}
public static void closeSession() throws HibernateException {
Session s = (Session) session.get();
session.set(null);
if (s != null)
s.close();
}
}

原來我一直使用的是方法一,而方法一雖然簡單,卻必須調用hibernate.cfg.xml來初始化Hibernate,如果二個包都用這樣的HibernateUtil,則2個Hibernate.cfg.xml只第一個起作用。

方法二,可以解決方法一可能帶來的問題。但如果自己了新的POJO,則仍然需要修改HibernateUtil.java。

所以,我試著使用了方法三,也成功了。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved