簡體   English   中英

在EclipseLink中分離實體

[英]Detaching Entities in EclipseLink

我在JPA 2.1 EclipseLink中分離實體時遇到問題。

我有一個JavaEE應用程序,其中某些實體的所有關系都設置為延遲加載。 我在所有數據庫查詢中都使用了join fetch,以便僅獲取所需的對象。 我使用Jackson(FasterXml)將對象轉換為JSON(用於JAX-RS等)

每當我從數據庫中選擇任何實體時,我都會在返回該實體之前分離該實體,以避免當Jackson將對象轉換為JSON時在數據庫上運行太多查詢(因為此轉換將調用要轉換的實體中的所有getter)。

我的問題是分離不起作用,當我查看JPA日志時,我看到該實體的所有成員都已轉換並由查詢加載到數據庫中。 當Jackson將對象轉換為JSON時會發生這種情況,而我的猜測是,因為Jackson在轉換對象時調用了吸氣劑。 為什么會發生這種情況,我該如何解決?

認為EclipseLink的分離僅用於停止跟蹤更改,出於性能原因將其從EM中撤出。 根據JPA規范訪問未提取的屬性會導致異常; 似乎沒有用戶真正在早期請求的東西,因此未實現該行為。 如果您想要這種行為,請提出要求。

任何人都可以在其訪問器中檢查懶惰屬性的獲取狀態,並引發應用程序異常。 這將需要修改EclipseLink通過編織生成的增強型Java代碼,以訪問惰性屬性。

另一種解決方案可能是使用構造函數查詢 構造函數查詢而不是返回托管實體對象,而是將選擇值傳遞給java構造函數,因此僅包括在查詢中獲取的數據。 這些對象不是實體,因此是完全分離的,並且可以構建任何java對象,甚至是現有的Entity類。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM