我是ORM的新手,我需要一些帮助才能理解。
假设我有以下标准SQL查询:
SELECT *, COUNT(test.testId) AS noTests FROM inspection
LEFT JOIN test ON inspection.inspId = test.inspId
GROUP BY inspection.inspId
我想在JPA中使用。
我有一个与Test实体有一对多关系的Inspection实体。 (检查有很多测试) 我试着在JPQL中写这个:
Query query = em.createQuery("SELECT insp, COUNT(???what???) " +
"FROM Inspection insp LEFT JOIN insp.testList " +
"GROUP BY insp.inspId");
1)如何编写COUNT子句?我必须将count应用于测试表中的元素,但testList是一个集合,所以我不能像COUNT(insp.testList.testId)
2)假设1已解决,将返回什么类型的对象。它肯定不是检验对象......我如何使用结果?
答案 0 :(得分:17)
AS
)List
所以:
SELECT new com.yourproject.ResultHolder(insp, COUNT(test.testId))
FROM Inspection insp LEFT JOIN insp.testList AS test GROUP BY insp.inspId
或者
SELECT new list(insp, COUNT(test.testId))
FROM Inspection insp LEFT JOIN insp.testList AS test GROUP BY insp.inspId
然后,可以将结果作为ResultHolder
的实例或java.util.List
进行访问,其中insp
为list.get(0)
,计数为{{1} }