[英]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.