请看一下这篇文章的结尾(找到另一种但也不起作用的方法)。如果有一天它起作用的话,第二种方法应该是更好的方法;)
我有一个由两个多对多关系组成的实体:MainEntity 有许多 As,MainEntity 有许多 B,其中 A 和 B 属于同一类型。以下 JQL 的示例:如果“ob”有 4 个“As”和 5 个“Bs”,我需要占位符“difference”中的 -1 结果,但它总是返回 0。使用外连接也是如此。
String query = "SELECT ob, (COUNT(A) - COUNT(B)) difference" +
+ " FROM MainEntity ob "
+ " JOIN ob.listA A "
+ " JOIN ob.listB B "
+ " GROUP BY ob "
+ " WHERE ob=:PARAM ";
以下示例有效:
"SELECT COUNT(A) FROM MainEntity ob JOIN ob.listA A "
+ "WHERE ob=:PARAM"
如果 ob 在其列表“listA”中有 5 个项目,则返回 5。任何人都可以帮助我构建正确的 JPQL 吗?
编辑: 这是有效的:
SELECT SIZE(ob.listA) FROM MainEntity ob WHERE ob=:PARAM
所以,我认为这也可以工作:
SELECT SIZE(ob.listA) - SIZE(ob.listB) FROM MainEntity ob WHERE ob=:PARAM
但它不起作用 - 让我感到困惑!此 JPQL 引发以下异常:
Caused by: Exception [EclipseLink-6069] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.QueryException
Exception Description: The field [ENTITYINFOERWEITERUNG.ID] in this expression has an invalid table in this context.
at org.eclipse.persistence.exceptions.QueryException.invalidTableForFieldInExpression(QueryException.java:722)
我认为这很有趣,因为遵循 JPQL 会引发相同的异常:
SELECT SIZE(ob.listA) - SIZE(ob.listA) FROM MainEntity ob WHERE ob=:PARAM