【问题标题】:How to write jpql for entity + a count off that entity?如何为实体编写 jpql + 对该实体的计数?
【发布时间】:2012-04-05 13:15:09
【问题描述】:

我有一个类Batch,其中有一个列表样本(List<Sample> 类型)。该列表通过多对一关系映射(样本 1->n 批次)。我需要能够获取所有批次以及每个批次中的样本数量。我将如何做到这一点而不必进行 n+1 查询?

另外,如何将其映射到对象?

TypedQuery<Batch> query = entityManager.createQuery("select b from Batch b"Batch.class);
List<Batch> batches = query.getResultList()

【问题讨论】:

    标签: hibernate hql jpql entitymanager


    【解决方案1】:

    由于 Batch 具有类型为 List&lt;Sample&gt; 的属性,因此 Batch 与 Sample 的关系是一对多的。您应该在 Batch 内的 List&lt;Sample&gt; 上注释 @OneToMany 并在 Sample 内的 Batch 属性上注释 @ManyToOne

    为避免 n+1 问题,您可以使用 fetch join 来获取 Batch 及其样本列表。这将导致 hibernate 生成 Batch 和 Sample 的左连接,以便返回的 Batch 实例完全具有它们的样本列表初始化。

    SELECT batch  FROM Batch batch join fetch batch.sampleList;
    

    【讨论】:

      猜你喜欢
      • 2020-04-24
      • 1970-01-01
      • 2017-09-20
      • 1970-01-01
      • 1970-01-01
      • 2014-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多