hibernate DAO中存在问题(会话已关闭!!)
我实现了如下DAO: //伪码hibernate DAO中存在问题(会话已关闭!!),hibernate,session,Hibernate,Session,我实现了如下DAO: //伪码 public MyDAO{ private Session session; MYDAO{ this.setSession(HibernateUtil.getSessionFactory().getCurrentSession()); } public void save(MyObj obj){ //save obj in db } } 现在我用dao保存了一个对象,效果很好。现在如果在单独的事务中保存两个对象,我会得到一个错误
public MyDAO{
private Session session;
MYDAO{
this.setSession(HibernateUtil.getSessionFactory().getCurrentSession());
}
public void save(MyObj obj){
//save obj in db
}
}
现在我用dao保存了一个对象,效果很好。现在如果在单独的事务中保存两个对象,我会得到一个错误,说“会话已经关闭”
乙二醇
我认为这个问题可以通过检查会话是否已关闭来解决。但是我在哪里可以设置一个新会话,因为我使用DAO中的会话来启动一个转换,而不是试图保持
MyDAO中的会话
,您可能最好只保持会话工厂
,需要时,通过在MyDAO
中定义getSession
方法,可以从中获取会话
public Session getSession() {
return sessionFactory.getCurrentSession();
}
或者干脆在MyDao
中不保存任何与会话处理相关的内容并使用
public Session getSession() {
return HibernateUtil.getSessionFactory().getCurrentSession();
}
hibernate会话绑定到特定的线程并在提交时关闭,但是会话工厂的getCurrentSession()
方法会根据需要获得一个新会话,这样您就不必担心它了。在美国,这是周六清晨,我们中的许多人可能都在睡觉。回复并不总是很快。我没有看到编辑,因为标题在几个小时前更改了。你现在的问题是什么?
public Session getSession() {
return HibernateUtil.getSessionFactory().getCurrentSession();
}