首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在JPA连接表策略中,无法将父A的实例类型更改为子类B

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

Stack Overflow用户
提问于 2019-12-20 16:07:51
回答 1查看 22关注 0票数 0

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

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

B和C扩展了A。

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

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

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

3-通过evictAll以及使用clear函数的实体管理器清除缓存。

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

因此,在重启wildfly服务器并调用findAll之后,数据带有类型B!

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

EN

回答 1

Stack Overflow用户

发布于 2020-01-04 03:13:26

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

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59421816

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档