【问题标题】:JPA Grouping based on a column and collecting results in a listJPA 基于列分组并在列表中收集结果
【发布时间】:2016-03-16 03:47:42
【问题描述】:

我正在使用 Spring data 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 进行自我加入,但我无法通过。有什么想法吗?

【问题讨论】:

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


    【解决方案1】:

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

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

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

    "from  Gang gang join fetch gang.member Member"
    

    现在在结果生成的 SQL 中,您可以在 Gang entity 上看到 Member entityLeft outer join

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-24
      • 1970-01-01
      • 1970-01-01
      • 2020-09-02
      • 2018-03-09
      • 1970-01-01
      • 1970-01-01
      • 2019-07-06
      相关资源
      最近更新 更多