public void savePerson(Person person){
Session session=sessionFactory.getCurrentSession();
Transaction t=null;
try{
t=session.beginTransaction();
session.save(person);
t.commit();
}catch(HibernateException e){
if(t!=null)
t.rollback();
}finally{
if(session!=null)
session.close();
}
}
会抛异常org.hibernate.SessionException: Session was already closed
换成openSession()就不会抛异常。
什么个情况,求解

解决方案 »

  1.   

    1、sessionFactory.openSession()永远打开新的session,在哪里调用打开的都是新的和原来的肯定不一样;
       需要手动的关闭Session。
    2、getCurrentSession从上下文找,如果有,用原来的,如果没有,建新的
       事务提交会自动关闭close。
      

  2.   

     你用getCurrentSession()记得提交事务就行了 不用在close(). 提交了就关了
      

  3.   

    哦,thanks,刚刚测试了,用getCurrentSession()不用close()就行
      

  4.   

    楼上的已经说得很清楚了,个人建议Hibernate还是集成在Spring里管理,这样不用每次手工调用Session的commit,打开关闭等API