如何为实体编写jpql +对该实体进行计数?

时间:2012-03-21 01:37:19

标签: hibernate hql jpql entitymanager

我有一个类Batch,其中包含一个列表样本(类型为List<Sample>)。该列表通过多对一关系映射(样本1-> n批处理)。我需要能够获取所有批次以及每个批次中的样本数量。如何在不进行n + 1查询的情况下完成此操作?

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

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

1 个答案:

答案 0 :(得分:2)

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

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

SELECT batch  FROM Batch batch join fetch batch.sampleList;