3

我在使用 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 子句中的子查询,那么,我该怎么办?

非常感谢 !

4

1 回答 1

3

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
于 2012-05-10T14:26:48.890 回答