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
hibernate DAO中存在问题(会话已关闭!!)_Hibernate_Session - Fatal编程技术网

hibernate 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保存了一个对象,效果很好。现在如果在单独的事务中保存两个对象,我会得到一个错误

我实现了如下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();
}