0
A
回答
1
有兩個對象在Hibernate中:
Short Answer :
SessionFactory : Heavy Weight.
Session : light weight.
龍答:
的SessionFactory負責創建與數據庫的連接和管理其他的東西,所以創建SessionFactory開始耗時的任務。 所以我會說只有一個sessionFactory對象應該爲每個應用程序創建,或者更好的方式是每個數據庫一個SeesionFactory。
現在來到您的會話中,它是輕量級對象,對於每個事務您都可以創建會話對象,當您完成事務時,您可以關閉會話。
0
事務關閉時應關閉Hibernate會話。每個請求一個會話是最好的方法。 Session是不是線程安全的
1
只要你想連接到你的數據庫,你應該保持你的會話。
但會話不是線程安全對象,不能由多個線程共享。所以你應該爲每個請求使用一個會話。
因此,最重要的是,如果您使用的是單線程應用程序,那麼最好爲整個應用程序使用一個會話。您可以使用SessionFactory.getCurrentSession()
。
但是,如果您的應用程序在多個線程中共享,那麼您應該始終使用SessionFactory.openSession()
打開新會話。雖然這比前者慢,但它是線程安全的。
你知道在哪裏可以把它處理
最好的做法是關閉它們在finally
塊。但是,如果您使用的是Java SE 7及更高版本,那麼您也可以在try-with-resources
中處理它們。
0
您可以配置休眠以自動打開和關閉會話,並且不需要手動關閉。如果你要打開和手動關閉,打開你的會話,執行查詢並關閉會話:
Transaction tx = session.beginTransaction();
try {
for (int i = 0; i < mesages.size(); i++) {
Message message = messages.get(i);
session.save(message);
if (i % 75 == 0) {
// flush a batch of inserts and release memory:
session.flush();
session.clear();
}
}
tx.commit();
}catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
tx.rollBack();
}finally{
session.close();
}
}
上面的代碼的問題鏈接:How to properly close and open a Hibernate session?
你也可以搜索一下Hibernate會話視圖過濾器來處理開放,自動關閉會話。
相關問題
- 1. 休眠會話關閉
- 2. 如何在會話關閉後重新打開休眠會話?
- 3. 何時在Java EE環境中打開/關閉休眠會話
- 4. 休眠:關閉會話工廠不關閉c3p0連接池
- 5. Spring Boot在關閉時關閉休眠會話 - 在完成@Async方法之前
- 6. 如何關閉事務邊界後的休眠會話
- 7. [N]休眠會話
- 8. 快速後續請求後休眠會話關閉異常
- 9. 關閉打開休眠會話(如果存在)
- 10. 休眠打開/關閉會話,DAO的正確方法
- 11. 休眠不關閉DB上的連接/會話
- 12. 休眠會話/ EntityManager關閉壓力測試
- 13. 休眠/春:無法初始化懶洋洋 - 沒有會話或會話關閉
- 14. Datasnap休息和關閉會話的TStream
- 15. 休眠會話錯誤
- 16. SEAM /休眠:一個會話
- 17. 休眠會話處理
- 18. EntityManager和休眠會話
- 19. 休眠會話線程
- 20. Vaadin休眠會話錯誤
- 21. JMS與休眠會話
- 22. 休眠:從合併會話
- 23. 管理休眠會話
- 24. 休眠會話範圍
- 25. 即使使用C3P0 +顯式會話,休眠連接也不會關閉。()
- 26. 休眠「沒有會話或會話已關閉」即使會話綁定在事務性方法
- 27. 如何斷開休眠會話
- 28. 如何使用休眠會話?
- 29. 如何手動打開休眠會話?
- 30. 休眠會話如何工作
Java SE 7及更高版本中的@ScaryWombat –