2012-05-10 74 views
2

我在使用JPA时遇到了一些问题。考虑这种情况:是否可以在FROM子句中使用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; 

所以然后我可以从结果迭代(在Object []用在每一个节点的列表,和c),然后分配a.quantity = C;

我重复一遍,我不想使用本机查询,但是我发现除了使用冗余数据之外没有其他方法,并且向A添加另一列称为数量,并且每次我插入并从B中删除时,更新此列答:

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

非常感谢!

回答

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 
+0

非常感谢您的答复!我一回家就会测试它。 – oriuken

+0

嗨,詹姆斯,它不会像我想要的那样工作,因为它只检索那些至少在B中有一个插入的东西。但.....但是......您让我意识到,使用JPA,我有B里面的A列表!所以我不需要进行查询,我只需要在实体中导航!非常感谢您的时间和共享的知识! – oriuken

相关问题