我有一个使用 Hibernate 访问 MYSQL 数据库的 struts 应用程序。我有许多对数据库进行更改的页面。这些更改进行得很好,数据在数据库中更新。但是,当浏览到应该显示此更新信息的页面时,它通常不存在,甚至在刷新几次页面后它仍然不存在。最终它会出现。我假设这与 hibernate 缓存数据有关,但我如何确保数据是最新的?我曾假设,当它全部通过 hibernate session 时,它会接受更改吗? 我用来进行更新的代码是:
hSession = HibernateUtil.getSessionFactory().getCurrentSession();
Transaction tx = hSession.getTransaction();
tx.begin();
hSession.update(user) ;
然后再次将该用户拉出:
org.hibernate.Session hSession = HibernateUtil.getSessionFactory()
.getCurrentSession();
Transaction tx = hSession.beginTransaction();
User u= (User) hSession.load(User.class, userID);
最佳答案
信息太少,无法真正给出答案。但有几点需要检查:
您正在使用交易。你正确地 promise 了吗?也许在某些时候您的代码看不到更改,因为尚未提交(或者因为读取代码在另一个使用先前状态的事务中)。
缓存也可能是个问题。要进行检查,您可以在每次更改数据库后显式刷新缓存 (Session.flush())。这可能会降低性能,但可能会帮助您缩小问题范围。
关于java - hibernate 不反射(reflect)变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/671830/