簡體   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