我正在使用EXTENDED持久性上下文,因为它可以让我懒惰地加载对象上的一对多关系,并且在“合并”之前它也不需要SELECT具有持久性上下文的对象。JPA/Hibernate查询返回陈旧结果
我有一个DummyObject:
A “最近更新” 的日期字段
一个一对多的关系
该对象被更新一次在一个JVM中通过调用em.merge(DummyObject)
秒。
在另一个JVM,我查询了DummyObject做类似下面
em.createQuery("from DummyObject").getResultList();
我也是这样做的查询每秒通话。
问题是,即使Hibernate正在生成正确的SQL语句(当我有语句登录时),Query的对象在连续调用后都会有第一个Query的Timestamp,而数据库正确获取更新(我已验证)。
我也尝试了各种乐观锁定与@Version无济于事。 (见注释)
另一件事是,当这并不正常工作:
我改变PersistentContextType 到TRANSACTIONAL(东西 不会让我懒洋洋地加载 一对多关系)
我做一个EntityManager.clear()调用 之前我做了以上的查询 (一些也不会允许 我懒洋洋地加载关系的一对多 )。
为什么我的查询返回陈旧的数据?我有没有启用了二级缓存或查询缓存。
我做错了什么?有什么我可以通过query.setHint(,)设置?
也许我不明白 “EXTENDED” 与TRANSACTIONAL正确。
是上次更新映射为版本? – Surya 2009-06-17 18:04:14
刚刚尝试过。没有工作。我也尝试添加一个明确的“版本”字段并用@Version注释它。也没有工作。 – systemoutprintln 2009-06-17 18:19:24
是等于和hashcode看lastUpdated?你是否看到不属于em.createQuery()结果的附加对象? – zmf 2009-06-26 18:01:41