3 回答

TA貢獻1810條經驗 獲得超4個贊
Hibernat 對數據庫的操作是通過Session來實現的,這里的session不同于頁面間傳遞參數的session,
而是類似于JDBC中的 Connection。Session是Hibernate運作的中心,對象的生命周期、事務的管理、數據庫的存取都與session息息相關。
Session是由HibernateSessionFactory創建的,是線程安全的,可以讓多個執行線程同時存取
HibernateSessionFactory而不會有數據共享的問題,但不能讓多個線程共享一個Session。
SessionFactory對象的創建:
Java代碼
Configuration cfg = new Configuration().configure();
SessionFactory sessions = cfg.buildSessionFactory();
session創建時使用了一個ThreadLocal類來建立一個Session管理的輔助類,使用ThreadLocal可以有效隔離執行所用的數據,
避開了Session的多線程之間的數據共享問題。
//創建一個線程本地變量。
Java代碼
public static final ThreadLocal<Session> threadlocal = new ThreadLocal<Session>();
public static org.hibernate.SessionFactory sessionFactory;
//獲取session的方法
public static Sessin getSession() throws HibernateException{
//返回線程局部變量的當前線程的值
Session s = (Session)threadLocal.get();
//如果sessionFactory為空,重新創建sessionFactory;如果線程為空,就打開一個新的session
if(session==null || !session.isOpen()){
if(sessionFactory == null){
rebuildSessionFactory(); session = (sessionFactory != null) sessionFactory.openSession():null;
// 將hibernate的session放入到線程中保存;只要這個線程不結束,都可以通過線程的get()方法來獲取
threadLocal.set(session);return session;
- 3 回答
- 0 關注
- 920 瀏覽
添加回答
舉報