2011-03-22 46 views
4

我的問題很簡單,但總體很重要 - 我想。我已經做了幾個小時的研究,但沒有發現任何有用的東西。使用級聯

介紹:
我有一個名爲Employee的實體 - 這是我係統的中心類(可以說它的人力資源管理)。通過寫作中心我認爲它與其他實體有很多關係。其中有OneToOne,OneToMany和ManyToOne屬性。 問題:
在某些情況下,我必須在一個EntityManager上下文(hibernate Session)中更改此實體(它也具有「String name」等基本屬性)並且必須刷新其他實體。當然,我可以用它:

entityManager.refreash(employee); 

但是......這也將刷新像「一百」相關的entites(提到:1-1,-1,1-關係),因爲這些關係有註釋參數Cascade.All或Cascade.REFREASH。在這種情況下不需要什麼 - 我只在這種情況下使用Employee實體本身。什麼是不想要的,因爲它會觸發性能,甚至在本地需要0.5秒...
問題:
有什麼辦法刷新實體可選擇關閉其屬性上的級聯。或者,也許:有沒有什麼辦法只使用Hibernate/JPA刷新實體的特定屬性?

我真的不希望那些由Hibernate觸發的20多個更長的SQL查詢,當我在這些情況下刷新我的實體時,但在其他情況下它是需要的。

換句話說,我會說我需要像「respectCascadesOnRefresh = true/false」這樣的選項,它可以在refreash之前設置。

還有其他想法嗎?

讚賞任何幫助,

佩德羅

回答

1
  • 首先,如果你只有兩個或三個字段刷新,使用標準的API。其次,Cascade在絕對上下文中並不是一件好事 - 你最好手動解決一些依賴關係。

  • 三,用FetchType.LAZY對集合!

P.S.不,你不能手動使用級聯,因爲這個註釋在生成你的數據庫方案時使用一次。

+0

1.嗯......在這種情況下不是正確的選項,因爲這不是一些「手動刷新」,確保它是由我的框架自動機制執行的,所以像「respectCascadesOnRefresh = true/false」這樣的選項會有用。標準 - 在這種情況下我看不到它們有用。 2.你可能是對的:) 3.他們不尊重刷新。附:我不使用休眠來生成我的數據庫模式。這不僅僅是爲了生產「模式」嗎? – Pedrop 2011-03-22 14:32:26

+0

3.這並不能解決1-1和* -1的關係。並且:我使用它們:)感謝您的回答! :) – Pedrop 2011-03-22 14:38:42

+0

對不起,我想寫:「附言:我不使用Hibernate來生成我的數據庫架構是不是它的發展。‘模式’只?」它是。 – Pedrop 2011-03-22 15:15:17