这是最近开始的,我无法追踪导致它的原因或如何解决它。 我有两个通过连接相互关联的对象
子实体:
@OneToMany(mappedBy = "child", cascade={ CascadeType.PERSIST, CascadeType.MERGE })
@JoinColumn(name="CHILD_ID", nullable=false)
private List<Parent> userCommunityOrganization = new ArrayList<Parent>();
父实体:
@JoinColumn(name = "CHILD_ID", referencedColumnName = "CHILD_ID")
@ManyToOne(cascade = { CascadeType.PERSIST, CascadeType.MERGE },optional = false)
private Child child;
查询应用程序中的数据如下所示:
em.createQuery("SELECT p.child FROM Parent p "
+ "WHERE p.community.communityId = :communityId ")
.setParameter("communityId", communityId)
.setHint(TopLinkQueryHints.REFRESH, HintValues.TRUE);
症状:
直接在数据库中更新父字段(将状态从活动更改为非活动状态) - 或任何其他关系。
访问应用程序中的子对象, 应用程序中的父字段是陈旧的(ex status = active),并且在服务器重新启动或应用程序重新部署之前将保持不变。
这不会影响子项,重新查询时,应用程序中的子项会反映对数据库的更新。
所有实体中的所有关系都会发生这种情况 我试过改变缓存:
<property name="eclipselink.cache.shared.default" value="false"/>
<property name="eclipselink.query-results-cache" value="false"/>
从javaEE 7回退到javaEE 6(这是自问题开始以来唯一的系统范围更改)。
没有快乐。有什么想法吗?
使用FIX更新
我替换了这些行:
<property name="eclipselink.cache.shared.default" value="false"/>
<property name="eclipselink.query-results-cache" value="false"/>
使用:
<property name="toplink.cache.shared.default" value="false"/>
现在,在数据库中更新后,我的所有关系都处于同步状态。我正在使用toplink,即使eclipselink是TL的一个子集,我想这并没有扩展到所有参数。 eclipselink.query-results-cache没有做任何事情,有时我使用的是命名查询,但在执行期间添加查询提示会消除命名查询的查询缓存。
但我仍然留下“为什么?”。什么应用程序的广泛变化会导致行为的这种变化?
环境:
答案 0 :(得分:0)
您正在使用刷新提示查询Child,仅强制刷新子项及其关系,而不是引用实体。如果您还希望刷新引用的实体,则必须使用级联刷新选项标记这些关系。