Hibernate 中的事务管理问题

dgyuannan 2007-08-16 10:29:23
在网上有很多人谈到hibernate关闭session情况。在HibernateSessionFactory使用了ThreadLocal。有些网友说在DAO中无需关闭session,如下:

public boolean save(Printers transientInstance) {
log.debug("saving Printers instance");
try {
// 开始事务
Transaction tran = getSession().beginTransaction() ;
// 执行语句
getSession().save(transientInstance);
// 提交事务
tran.commit();
log.debug("save successful");
return true;
}
catch (RuntimeException re) {
log.error("save failed", re);
System.out.println("Error: "+re.getMessage());
return false;
}
}

但有些文章说如果不关闭session会造成不好影响,应该打开Session,但操作执行完毕后要关闭Session,如下:
public boolean save(Printers transientInstance) {
log.debug("saving Printers instance");

Transaction tran=null;
try {
// 开始事务
tran = getSession().beginTransaction() ;
// 执行语句
getSession().save(transientInstance);
// 提交事务
tran.commit();

log.debug("save successful");
return true;
} catch (RuntimeException re) {
log.error("save failed", re);
//设置回滚
if(tran!=null)
tran.rollback();
System.out.println("Error: "+re.getMessage());
return false;
}
finally{
closeSession();
}
}

请问哪种合理?在使用ThreadLocal后是不是可以不关闭Session?
...全文
136 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
m07g13m 2009-12-28
  • 打赏
  • 举报
回复
那不会产生很多的连接嘛,不关行吗?
不能飞的肥燕 2007-08-16
  • 打赏
  • 举报
回复
最好不要关闭
如果关闭了
像lazy-loading等特性就没法使用了
所以可以使用threadlocal的方法。
对于web应用
可以看看spring的open session to view方法。
前段时间被这个session差点搞死了:)

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧