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. 配置c3p0在连接关闭时关闭休眠会话
- 4. 问题与休眠“会话关闭”
- 5. 如何在会话关闭后重新打开休眠会话?
- 6. 何时在Java EE环境中打开/关闭休眠会话
- 7. 休眠:关闭会话工厂不关闭c3p0连接池
- 8. 可以在关闭休眠会话后刷新会话吗?
- 9. Spring Boot在关闭时关闭休眠会话 - 在完成@Async方法之前
- 10. 休眠会话
- 11. 如何关闭事务边界后的休眠会话
- 12. [N]休眠会话
- 13. 如何在会话关闭时强制休眠不保存和数据更新?
- 14. 休眠不关闭DB上的连接/会话
- 15. 关闭打开休眠会话(如果存在)
- 16. 休眠会话/ EntityManager关闭压力测试
- 17. 休眠打开/关闭会话,DAO的正确方法
- 18. 事务回滚后,Spring不关闭休眠会话
- 19. 需要关闭休眠会话后选择或不?
- 20. 快速后续请求后休眠会话关闭异常
- 21. 休眠/春:无法初始化懒洋洋 - 没有会话或会话关闭
- 22. 休眠 - 未能懒洋洋地初始化 - 没有会话或会话关闭
- 23. EntityManagerFactory已关闭,休眠
- 24. Datasnap休息和关闭会话的TStream
- 25. 休眠会话工厂Android
- 26. JMS与休眠会话
- 27. 休眠会话范围
- 28. SEAM /休眠:一个会话
- 29. 休眠会话线程
- 30. 休眠4会话log4j
Java SE 7及更高版本中的@ScaryWombat –