2012-03-21 10 views
1

我有一個類Batch其中屬性有一個清單樣本(類型List<Sample>)。此列表通過多對一關係映射(樣本1-> n批處理)。我需要能夠獲取所有批次以及每個樣本的數量。我如何做到這一點,而不必做n + 1查詢?如何寫實體+ jpql關閉該實體的計數?

另外,如何將其映射到對象?

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

回答

2

作爲批量有一個屬性哪種類型List<Sample>,批次到樣品的關係是一對許多。您應該在Batch內的List<Sample>上註釋@OneToMany,並在樣本內的批次屬性上註釋@ManyToOne

爲避免出現n + 1問題,可以使用fetch連接來獲取批處理以及其樣本列表。這會導致hibernate生成批處理和樣本的左連接,以便返回的批處理實例具有其樣本列表完全初始化。

SELECT batch FROM Batch batch join fetch batch.sampleList;