2014-03-04 164 views
3
public List<Examination> loadExaminations(int pID) { 

    session = sessionFactory.openSession(); 
    session.setFlushMode(FlushMode.MANUAL); 
    ManagedSessionContext.bind(session); 
    session.beginTransaction(); 
    Patient tpatient = (Patient) session.get(Patient.class, pID); 
    List<Examination> examinations = new LinkedList<>(); 
    if (tpatient.getExaminations()!=null) 
    if (!tpatient.getExaminations().isEmpty()) { //I get the exception to this line 
     examinations = (List<Examination>) tpatient.getExaminations(); 
    } 
    ManagedSessionContext.unbind(sessionFactory); 
    session.flush(); 
    session.getTransaction().commit(); 
    session.close(); 
    return examinations; 
} 

例外:org.hibernate.SessionException:会话关闭

org.hibernate.SessionException: Session is closed 

我得到的例外,但实际上它似乎是精细的程序;正在发生永恒的事情,但例外是困扰着我。

感谢您的帮助!

+1

'session.getTransaction()。提交()'会自动关闭会话,所以我认为除了正在由'session.close()'抛出? 'flush()'也是不必要的。 – MattR

+0

不,这个tpatient.getExaminations()。isEmpty()语句抛出异常! – BLama

+0

您可能正在处理分离的对象。 – Jay

回答

0

如果写入您的Hibernate Config文件会话关闭标记中,则不需要使用session.close()方法,否则将会话关闭标记写入hibernate配置文件并删除session.close()语句。

像下面一行写入休眠配置文件。

<property name='transaction.auto_close_session'>true</property>