FROM子句中的JPA子查询是否可能?

时间:2012-05-10 01:16:21

标签: jpa subquery

我在使用JPA时遇到了一些问题。请考虑以下情况:

表A(id_a) | 表B(id_b,id_a)

我需要的是这样的查询:

Select a.*, c.quantity from A as a, (Select Count(*) as quantity 
from B as b where b.id_a = a.id_a) as c;

问题是我想使用jpa查询而不是本机查询,如下所示:

Select a, c FROM A a, (Select Count(b) FROM B b where a.idA = b.a.idA) c;

那么我可以从结果中迭代(每个节点中带有a和c的Object []列表)然后分配a.quantity = c;

我再说一遍,我不想使用本机查询,但我找不到使用冗余数据的其他方法,并在A中添加另一个名为Quantity的列,每次从B插入和删除时,在A中更新此列

请帮助,我在某处读到JPA不接受Form子句中的子查询,那么,我该怎么办?

非常感谢!

1 个答案:

答案 0 :(得分:2)

JPA不支持FROM子句中的子选择,但EclipseLink 2.4当前里程碑版本确实有这种支持。

请参阅, http://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Basic_JPA_Development/Querying/JPQL#Sub-selects_in_FROM_clause

您可以使用普通连接重写查询。

可能,

Select a, size(a.bs) from A a

Select a, count(b) from A a join a.bs b group by a