繁体   English   中英

无法将父类 A 的实例的类型更改为子类 B 在 JPA 连接表策略中

[英]Cannot change the type of an instance of parent A to subclass B In the JPA join table strategy

我们在 JavaEE7 应用程序中使用 Eclipselink-2.6 和 wildfly-8 服务器。

我们有三个 JPA 实体 A、B 和 C。

B 和 C 扩展了 A。

为了将对象“myObjectId”A 的类型更改为 B,我们尝试:

1- 使用条件查询将表“A”中实例“myObjectId”的 dtype 值从“a”更改为“b”。

2- 在数据库中的表“B”中为相同的 id“myObjectId”创建一个新行,也使用条件查询。

3- 使用清除功能通过 evictAll 和 Entitymanger 清除缓存。

之后,当我尝试查找所有类型 B 的数据时,对象“myObjectId”出现在列表中,但类型为 A!

重启wildfly服务器并调用findAll后,数据类型为B!

为什么即使一级和二级缓存被清除,myObjectId 也没有改变它的类型!?

请参阅https://wiki.eclipse.org/EclipseLink/Examples/JPA/Caching

本质上 EclipseLink 将 JPA 缓存驱逐调用映射到它自己的失效逻辑,这似乎使用软引用保持对对象的引用,以便维护对象身份。 这可以防止 A1->B1->A1' 在具有惰性关系的循环中发生。

尝试按照文档中的建议调用((JpaEntityManager)em.getDelegate()).getServerSession().getIdentityMapAccessor().initializeAllIdentityMaps() ,然后读取更改后的类。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM