我使用的是Hibernate 3.3,最近升级到了4.3.11版本。 搬到这个版本后,我开始注意到一个奇怪的问题。
看起来db的当前状态只显示在用于删除它的确切连接池上。
以下是用于保存的代码片段
Transaction tx = null;
try {
Session session = hibSessFact.currentSession();
tx = session.beginTransaction();
session.save(o);
tx.commit();
}catch(Exception e){
e.printStackTrace();
} finally {
hibSessFact.closeSession();
System.out.println("session closed");
}
以下是检索数据的方式
try{
Session session = hibSessFact.currentSession();
Criteria crit = session.createCriteria(MyObject.class);
List objList = crit.list();
System.out.println("returned list");
return objList;
}catch(Exception e){
e.printStackTrace();
}
finally{
hibSessFact.closeSession();
}
P.S。:添加新对象时,对象检索也会发生同样的情况。它只是间歇地显示,恰好是每第3个请求。
更新:ThreadLocal用于使用HibernateSessionFactory创建会话。
答案 0 :(得分:1)
而不是用于获取会话的currentSession使用openSession(),如下所示:
Session session = hibSessFact.openSession();
否则,在hibernate配置中添加以下属性。
<property name="hibernate.current_session_context_class">thread</property>