我有一个类Batch
,其中包含一个列表样本(类型为List<Sample>
)。该列表通过多对一关系映射(样本1-> n批处理)。我需要能够获取所有批次以及每个批次中的样本数量。如何在不进行n + 1查询的情况下完成此操作?
另外,如何将其映射到对象?
TypedQuery<Batch> query = entityManager.createQuery("select b from Batch b"Batch.class);
List<Batch> batches = query.getResultList()
答案 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;