2016-12-15 123 views
0

我有一個項目,其中所有模型關係(1:m或1:1)提取類型定義爲lazy。 現在考慮我有一個叫做M的模型,它有三個關係a,b和c,都是1:m。 現在我有三個服務:服務 -A 服務B 服務-C在休眠時使用延遲加載時需要的關係

如果服務A迴歸模型M那麼它的關係,必須填充儘管其它B,C中含有的代理模式。 如果Service-B返回模型M,則其關係b必須填充,儘管其他a,c包含代理模型。 與Service-C相同

任何人都可以知道如何做到這一點?

這裏的另一種情況是,如果只有一個Service和用戶提供參數來加載關係a或b或c,那麼該如何實現?

+1

你可以看看使用JPA 2.1中引入的實體圖功能(我認爲休眠版本4.3+)。請參閱此處瞭解更多信息。 http://www.thoughts-on-java.org/jpa-21-entity-graph-part-1-named-entity/ –

+0

良好的解決方案,謝謝你的答案,我在等待。 –

回答

1

簡單的方法就是來填充他們的內部事務:

在ServiceA

entity.getCollectionB().size()

在ServiceB entity.getCollectionC().size()

查看其他: http://www.thoughts-on-java.org/5-ways-to-initialize-lazy-relations-and-when-to-use-them/

編輯:一延遲加載到一個關係也不會與實體圖形一起工作。無論有沒有它,你都需要字節碼工具。優化列讀取並不像優化行讀取那麼重要。見:http://www.thoughts-on-java.org/jpa-21-entity-graph-part-1-named-entity/#comment-219

+0

大小將不會在一對一的關係... –

+0

艾倫乾草給了我最好的解決方案。 –

+0

這也造成了[n + 1] hibernate問題。 –