JPA + Hibernate强制JPA不要在延迟加载时使用Proxies

时间:2017-03-08 06:48:07

标签: java hibernate jpa proxy lazy-loading

我们正在使用JPA + Hibernate。 我有一些延迟加载的多对一映射。

在Service中,我通过调用getter方法初始化多对一对象。但是代理被分配给父VO而不是实际的VO对象。

我的问题是,JPA中是否有任何方法强制使用无代理策略。 我的限制是我不能使用Hibernate Objects或@LazytoOne之类的注释等。

提前感谢。

1 个答案:

答案 0 :(得分:2)

你不能阻止Hibernate在那里使用代理对象,因为它不得不保证它是一个懒惰的关系。

您有多种选择:

  1. 触发初始化Hibernate.initialize(parent.getChild())。请注意,这不是最好的方法,这也需要一个活动的交易。
  2. 获取实体本身时获取关系。这可以通过Fetch Joins来完成。 JPQL / HQL / Criteria API能够执行此操作。
  3. 使用仅包含所需数据的只读投影。对于这种特殊情况,您可以使用Spring Data JPA,因为它附带了这样的功能。
  4. 我建议你选择2或3选项,因为它们是最有效的方法。

    关于延迟加载的here