2010-07-19 34 views
2
調用@PostLoad方法

ENV:JBoss Seam的,JPA,休眠是否有可能動態觸發僅在需要

我們使用@PostLoad註釋動態初始化一些瞬態變量在我們@Entity(有時這涉及到查找父實體初始化狀態 - 這是一個代價高昂的操作)。

但是在某些情況下,我們不希望這個@PostLoad被觸發,因爲我們不會依賴瞬態變量。

有沒有辦法在加載後動態地控制數據。

解決此問題的一種方法是僅根據需要調用此方法(即通過刪除@PostLoad批註並手動調用此方法),但這也很容易出錯。

有沒有其他方法可以解決這個問題。

+0

我想你必須告訴我們你期望Hibernate知道何時觸發postLoad,何時不觸發?根據實體的數據?如果你想要的是在讀取數據之前做一些事情,例如:session.pleaseTriggerPostLoad(Foo.class),那麼和按需顯式調用方法沒什麼區別。 – 2010-07-19 11:39:09

+0

能夠將這樣的標誌發送給JPA查詢會很有幫助,因爲這些類型的狀態更新程序在大型集合上運行時以及在急切獲取情況下都很昂貴。我從Salesforce數據中收集了一系列帳戶也遇到類似問題。要嘗試自定義查詢以獲取ID列表來構建,然後使用重載構造函數加載對象,請設置禁止更新的noExpiry標誌。 – Brian 2012-05-24 03:38:34

回答

1

但是在某些情況下,我們不希望這個@PostLoad被觸發,因爲我們不會依賴瞬態變量。

創建兩個實體,一個使用@PostLoad和瞬態字段,另一個使用「更輕」沒有。

+0

你認爲這是可能的嗎?因爲對於特定的表只能有一個@Entity類,並且如果聲明@PostLoad它將運行它。不確定我們是否可以有兩個不同的實體類。請澄清 – Sam 2010-07-20 03:39:56

+0

@Samuel嗯......誰說*只有一個@Entity類的特定表*?您可以將多個實體映射到同一個表上。現在,我不是說這是理想的,但對您而言,這可能是一個解決方案。 – 2010-07-20 03:56:52

+0

我同意這可能是一個可能的解決方法,但它會涉及額外的類和可能更高的代碼維護 – Sam 2010-07-20 09:05:20

相關問題