Java oneToMany/ManyToOne对象在应用程序外部更新时会过时
这是最近开始的,我无法找到是什么原因造成的,也无法找到修复方法。 我有两个对象通过连接相互关联 子实体:Java oneToMany/ManyToOne对象在应用程序外部更新时会过时,java,jpa,eclipselink,smartgwt,glassfish-4.1,Java,Jpa,Eclipselink,Smartgwt,Glassfish 4.1,这是最近开始的,我无法找到是什么原因造成的,也无法找到修复方法。 我有两个对象通过连接相互关联 子实体: @OneToMany(mappedBy = "child", cascade={ CascadeType.PERSIST, CascadeType.MERGE }) @JoinColumn(name="CHILD_ID", nullable=false) private List<Parent> userCommunityOrganization = new ArrayList&
@OneToMany(mappedBy = "child", cascade={ CascadeType.PERSIST, CascadeType.MERGE })
@JoinColumn(name="CHILD_ID", nullable=false)
private List<Parent> userCommunityOrganization = new ArrayList<Parent>();
在应用程序中查询数据的方式如下:
em.createQuery("SELECT p.child FROM Parent p "
+ "WHERE p.community.communityId = :communityId ")
.setParameter("communityId", communityId)
.setHint(TopLinkQueryHints.REFRESH, HintValues.TRUE);
症状:
直接在数据库中更新父字段(将状态从活动更改为非活动)-或任何其他关系
访问应用程序中的子对象,
应用程序中的父字段已过时(ex status=active),并将一直保持不变,直到服务器重新启动或应用程序重新部署
这不会影响child,重新查询时会在应用程序中为child反映对db的更新
所有实体中的所有关系都会发生这种情况。我已尝试更改缓存:
<property name="eclipselink.cache.shared.default" value="false"/>
<property name="eclipselink.query-results-cache" value="false"/>
从JavaEE7返回JavaEE6(这是自问题开始以来唯一的系统范围的更改)
没有快乐。有什么想法吗
使用修复程序更新
我替换了这些行:
<property name="eclipselink.cache.shared.default" value="false"/>
<property name="eclipselink.query-results-cache" value="false"/>
与:
现在,在数据库中更新时,我的所有关系都处于同步状态。我使用的是toplink,即使eclipselink是TL的一个子集,我想这并没有扩展到所有参数。
query-results-cache不起任何作用,我曾经使用过命名查询,但在执行过程中添加查询提示消除了命名查询的查询缓存
但我还是会问“为什么?”。什么应用程序范围的更改会导致这种行为的更改
环境:
- 爪哇7
- 玻璃鱼4.1
- JPA1.0(不要评判我)
- toplink/eclipselink
- gwt 2.3
- smartgwt
- MySql
<property name="eclipselink.cache.shared.default" value="false"/>
<property name="eclipselink.query-results-cache" value="false"/>
<property name="toplink.cache.shared.default" value="false"/>