我有一个非常简单的连接两个表的表,为了简化问题,我们可以说表1是a,表2是b,有一个连接表ab。
aabba\u idab\u idb\u ida\u细节a\u id\u fkb\u细节b\u id\u fk
其中a_id_fk和b_id_fk分别是外键。我试图创建一个查询来检索a中与b有关系的所有行。因此,我的函数接收b\u id作为参数,我想搜索ab以获得b\u id\u fk==b\u id的所有行,然后使用search a来搜索a\u id==a\u id\u fk从上一次搜索返回的所有行。
我进行了测试,可以在普通sql中使用嵌套的select进行测试,如下所示:
SELECT *
FROM A
WHERE A_ID =
(SELECT A_id_fk
from AB
where B_id_fk = B_id);
所以我阅读了jpql的文档:http://openjpa.apache.org/builds/1.2.0/apache-openjpa-1.2.0/docs/manual/jpa_langref.html#jpa_langref_exists 试过这个
@Transactional
public List<A> getA(int B_id){
TypedQuery<A> query = em.createQuery("select i from A i where i.A_id =
(select z.A_id_fk from AB z where z.B_id_fk = :B_ID)", A.class);
return query.setParameter("B_ID",B_id).getResultList();
}
我现在真的迷路了,因为我遵循了文档中给出的示例,但是它给我带来了无法解决z.a\u id.fk错误的问题,有没有办法在a.class中嵌套b.class?我不知道我应该在这里做什么。
2条答案
按热度按时间yks3o0rb1#
以下是最终的效果:
jtjikinw2#
根据您的查询,我假设您直接Map了实体(
A
与A_id
,A_details
领域,B
与B_id
,B_details
字段,以及AB
与AB_id
,A_id_fk
,B_id_fk
).我运行了一个测试,您的查询(您在这里编写的方式)按预期工作。
unable to resolve z.A_id.fk
表明您的原始代码中有一个拼写错误(A_id.fk
而不是A_id_fk
).如果您有不同的模型,请在这里包括您的实体模型以及完整的例外情况。