我最近在使用hibernate的过程中,遇到一个困扰我已久的问题。
现象如下:当修改或者更新某一条数据后,再通过session去查询,有时会得到修改过的结果,有时候是修改前的结果。经查看,数据库已经更新。
求解:到底是什么问题引起的?
==================================
经过简单分析,我认为问题产生原因如下:
在HibernateSessionFactory中,我们通过一个本地线程来管理session,但每次我们得到的session并非是某个固定的,而是随机分配的。这样就会引发一个问题。当我们的sessionA通过update更新后,sessionB并不知道,所以不会与数据库同步,当我们再次去到的是sessionB的时间,cache中的数据仍然为老数据,所以就会发生有时数据变为新的,有时变为老的。
如果我的分析正确的话,求教各位,如何解决?
public class HibernateSessionFactory {
... ...
public static Session currentSession() throws HibernateException {
Session session = (Session) threadLocal.get();
if (session == null || !session.isOpen()) {
if (sessionFactory == null) {
try {
cfg.configure(CONFIG_FILE_LOCATION);
sessionFactory = cfg.buildSessionFactory();
} catch (Exception e) {
System.err
.println("%%%% Error Creating SessionFactory %%%%");
e.printStackTrace();
}
}
session = (sessionFactory != null) ? sessionFactory.openSession()
: null;
threadLocal.set(session);
}
return session;
}
... ...
}