Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我应该何时关闭会话(从Tapestry中的HibernateSessionManager获得)?_Java_Hibernate_Session_Tapestry - Fatal编程技术网

Java 我应该何时关闭会话(从Tapestry中的HibernateSessionManager获得)?

Java 我应该何时关闭会话(从Tapestry中的HibernateSessionManager获得)?,java,hibernate,session,tapestry,Java,Hibernate,Session,Tapestry,何时应该关闭会话,从Tapestry中的HibernateSessionManager获取 一些代码。考虑一些方法,处理 HiBurnEnsieSistMeals< /Cord>对象: public void foo(final HibernateSessionManager hsm) { Session session = hsm.getSession(); 第一种情况:会话仅用于从数据库获取数据: session.createQuery("from SomeTable ... b

何时应该关闭会话,从Tapestry中的
HibernateSessionManager
获取

一些代码。考虑一些方法,处理<代码> HiBurnEnsieSistMeals< /Cord>对象:

public void foo(final HibernateSessionManager hsm) {
    Session session = hsm.getSession();

第一种情况:会话仅用于从数据库获取数据:

session.createQuery("from SomeTable ... blablabla").list();
我必须手动关闭会话(
session.close();
)吗


第二种情况:会话还用于保存/更新结果:

session.saveOrUpdate(obj);

只要在
hsm
对象上
commit
就足够了吗:
hsm.commit(),或者我也应该执行
session.close()

我已经回答了

要回答另一个问题,只要使用
HibernateSessionManager
,就不必担心关闭tapestry hibernate为您提供的会话

try {
   do_stuff(hibernateSessionManager.getSession());
   hibernateSessionManager.commit();
}catch(Exception ex){
   hibernateSessionManager.abort();
}

也不我也在你之前的帖子中评论了你的答案。而且,你没有回答这个问题。我的第一个病例呢?我应该在获取结果后提交吗?在Tapestry关闭会话之前,所有未提交的事务都会回滚。为什么您认为Tapestry会自动关闭我的会话,如果我在单独的服务中使用它?
HibernateSessionManagerImpl
实现
ThreadCleanupListener
,并将会话作为服务的一部分关闭。