我正在尝试这样做:
//...
class Person {
@ManyToMany(fetch = FetchType.EAGER)
@Fetch(FetchMode.JOIN)
private Set<Group> groups;
//...
}
Run Code Online (Sandbox Code Playgroud)
当我personRepository.findAll();通过Spring JPA存储库时,它会生成n + 1个查询,就好像我没有任何@Fetch集合一样.(一个查询首先获取所有人,然后每个人查询一次以获取组).
但是,使用@Fetch(FetchMode.SUBSELECT) 作品!它只生成2个查询.(一个适用于所有人,一个适用于团体).所以hibernate会对一些 fetch参数作出反应,而不是JOIN.
我也试过EAGER没有运气去除取物.
//...
class Person {
@ManyToMany()
@Fetch(FetchMode.JOIN)
private Set<Group> groups;
//...
}
Run Code Online (Sandbox Code Playgroud)
我正在使用Spring JPA,这是我的存储库的代码:
public interface PersonRepository extends JpaRepository<Person, Long> {
}
Run Code Online (Sandbox Code Playgroud)
JOIN是不是通过Spring JPA工作,还是我做错了什么?