2017-03-08 99 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

相关问题