我有一个连接两个表的非常简单的连接表,为了简化问题,我们可以说表1是a,表2是B,有一个连接表AB。
其中A_id_fk和B_id_fk分别是外键。我试图创建一个查询来检索a中与B有关系的所有行,所以我的函数接收B_id作为参数,我想搜索AB以获得B_id_fk==B_id的所有行,然后使用搜索a搜索A_id==上一次搜索返回的A_id_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_id.fk错误,也许有一种方法可以在a.class中嵌套b.class吗?我不知道我该在这里做什么。
根据您的查询,我假设您直接映射了您的实体(A
与A_ID
、A_Details
字段,B
与B_ID
、B_Details
字段,AB
与AB_ID
、A_ID_FK
、B_ID_FK
)。
我已经运行了一个测试,您的查询(您在这里编写它的方式)按照预期工作。
无法解析z.a_id.fk
表示您的原始代码中有错误(a_id.fk
而不是a_id_fk
)。
如果您有一个不同的模型,请在这里包括您的实体的模型以及完整的例外情况。
它为集合中的每个元素重复一组语句。 此循环用于访问和操作数组或VB.Net集合中的所有元素。 此循环结构的语法是 - For Each element [ As datatype ] In group [ statements ] [ Continue For ] [ statements ] [ Exit For ] [ statements ] Next [ el
可以将select语句作为外部select语句的语句序列的一部分。 即使内部和外部选择的case常量包含公共值,也不会产生冲突。 例子 (Example) Module decisions Sub Main() 'local variable definition Dim a As Integer = 100 Dim b As Integer = 200
Go 语言条件语句 你可以在 if 或 else if 语句中嵌入一个或多个 if 或 else if 语句。 语法 Go 编程语言中 if...else 语句的语法如下: if 布尔表达式 1 { /* 在布尔表达式 1 为 true 时执行 */ if 布尔表达式 2 { /* 在布尔表达式 2 为 true 时执行 */ } } 你可以以同样的方式在 if
前面章节中,详细介绍了 3 种形式的条件语句,即 if、if else 和 if elif else,这 3 种条件语句之间可以相互嵌套。 例如,在最简单的 if 语句中嵌套 if else 语句,形式如下: if 表达式 1: if 表示式 2: 代码块 1 else: 代码块 2 再比如,在 if else 语句中嵌套 if else 语句,形式
Swift 条件语句 在 Swift 语言中,你可以在一个 if 或 else if 语句内使用另一个 if 或 else if 语句。 语法 Swift 语言中 嵌套 if 语句的语法: if boolean_expression_1 { /* 当 boolean_expression_1 表达式 true 时执行 */ if boolean_expression_2 {
C++ 判断 您可以把一个 switch 作为一个外部 switch 的语句序列的一部分,即可以在一个 switch 语句内使用另一个 switch 语句。即使内部和外部 switch 的 case 常量包含共同的值,也没有矛盾。 C++ 中的 switch 语句允许至少 256 个嵌套层次。 语法 C++ 中 嵌套 switch 语句的语法: switch(ch1) { case 'A'