2017-03-08 42 views
1

我們正在使用JPA + Hibernate。 我有一些多對一的映射,這是惰性加載。JPA + Hibernate強制JPA不使用代理來延遲加載

在服務中,我通過調用其getter方法來初始化多對一對象。但代理被分配給父VO,而不是實際的VO對象。

我的問題是,JPA有沒有辦法強制使用代理策略。 我在這裏的限制是我不能使用休眠對象或@LazytoOne等註釋。

在此先感謝。

回答

2

你不能阻止Hibernate在那裏使用代理對象,因爲它不得不保證它是一個懶惰的關係。

你有多種選擇:

  1. 觸發初始化Hibernate.initialize(parent.getChild())。請注意,這不是實現它的最佳方式,這也需要一個活動事務。
  2. 提取實體本身時的關係。這可以通過Fetch Joins完成。 JPQL/HQL/Criteria API能夠做到這一點。
  3. 使用只包含您需要的數據的只讀投影。對於這種特殊情況,您可以使用Spring Data JPA,因爲它具有此功能。

我建議你去選擇2或3,因爲他們是最有效的方法來做到這一點。

更多閱讀懶惰加載here

相關問題