我的实体的某些字段标记为LAZY
。为了加载LAZY
字段,只需在会话打开时访问getter,以便ORM代理执行select
个子查询。
但是,当您需要完全解析的对象作为join
提取的急切关系时,这不是最理想的。
如何将某些字段标记为EAGER
临时仅用于一个查询?
这可能是JPA标准还是只有像Hibernate这样的专有扩展?
答案 0 :(得分:6)
Hibernate有一个名为Fetch Profiles的功能可以解决这个问题。它需要访问Hibernate Session
,但您可以使用unwrap()
从EntityManager
访问它。
如果您需要纯JPA解决方案,则在需要提取的用例中加载对象时,可以使用join fetch
的查询。
<强>更新强> JPA 2.1(由Hibernate 4.3实现)支持类似于获取配置文件的功能 - entity graphs。
答案 1 :(得分:0)
春季JpaRepository
允许使用org.springframework.data.jpa.repository.EntityGraph
标记查询(包括自定义):
@Entity Book {
@Id Long id;
@OneToMany List<Author> authors;
}
@EntityGraph(attributePaths = {"authors", "author.address"})
@Query("select b from Book b" +
" where b.id in (:ids)")
List<Book> loadAll(@Param("ids") List<Long> ids);