JPA基于列分组并在列表中收集结果

时间:2016-03-16 03:47:43

标签: hibernate jpa spring-data spring-data-jpa

我正在使用Spring数据JPA我有一个类似于

的表
    NAME            AGE     GANG 
---------------------------------
Iron Man            46      1    
Black Panther       45      1    
Captain America     96      2    
Ant Man             40      2    
The hulk            48      3    

我想将此映射到下面的类而没有N + 1选择问题

public class Gang {
    private int id;
    private List<Member> members;
}

public class Member {
    private String name;
    private int age;
}

我尝试与@OneToMany一起自我加入,但我无法通过。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

通过确保初始查询获取在适当初始化状态下加载所需对象所需的所有数据来解决此问题。一种方法是使用HQL获取连接。我们使用HQL

如果第一个查询填充主对象并且第二个查询为返回的每个唯一主对象填充所有子对象,则可能发生N + 1问题。

要解决N+1 SELECTs问题,请使用HQL join fetch

"from  Gang gang join fetch gang.member Member"

现在,在结果生成的SQL中,您可以在Left outer join Member上看到entity Gang的{​​{1}}。