【问题标题】:Projections on nested collections嵌套集合的投影
【发布时间】:2018-01-06 19:27:37
【问题描述】:

我有三个实体主题、主题和类别。如何在检索具有主题和主题的所有类别时为每个实体预取 id 和 name 列?我不需要其他字段,因为它会影响性能。

@Entity
class Topic{
  private Long id;
  private String name;
  ...
  //other fields
} 

@Entity
class Subject{
  private Long id;
  private String name;
  ...
 //other fields

  @OneToMany(fetch=FetchType.LAZY)
  private List<Topic> topics;
}

@Entity
class Category{
  private Long id;
  private String name;
  ...
  //other fields
  @OneToMany(fetch=FetchType.LAZY)
  private List<Subject> subjects;
}

【问题讨论】:

    标签: java hibernate jpa orm


    【解决方案1】:

    我建议在投影本身之上创建一个结果类,因为它可以简化结果集处理。 ResultClass 需要有一个带有相关查询结果字段的构造函数,并且您必须在查询本身中使用完全限定名称。

    select new org.mypkg.ResultClass(c.id, c.name, s.id, s.name, t.id, t.name)
    from Category c
      inner join c.subjects s
      inner join s.topics
    

    那么你只需:

    List<ResultClass> results = em.createQuery(query).list();
    

    【讨论】:

    • 谢谢,但有一个问题:之后我必须手动对主题和主题进行分组
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-26
    • 2021-06-19
    • 2015-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多