Jpa where子句中带子查询的Eclipselink问题
我有以下结构:我正在使用eclipselink 2.6.0Jpa where子句中带子查询的Eclipselink问题,jpa,subquery,left-join,eclipselink,criteriaquery,Jpa,Subquery,Left Join,Eclipselink,Criteriaquery,我有以下结构:我正在使用eclipselink 2.6.0 @Entity public class A { @Id private double id; ... @OneToMany private List<B> b; @OneToMany(mappedBy = "a") private List<C> c; ... } @Entity public class B { @Id private double id; privat
@Entity
public class A {
@Id
private double id;
...
@OneToMany
private List<B> b;
@OneToMany(mappedBy = "a")
private List<C> c;
...
}
@Entity
public class B {
@Id
private double id;
private boolean hidden;
}
@Entity
public class C {
@Id
private double id;
private String label;
private String value;
@ManyToOne
private A a;
}
如您所见,提供者完全忽略左连接,就好像它不存在一样!它不会在两个表A和B之间进行任何连接。。
注意,在JPA JSR中,查询应该是正确的。它还用作命名查询。但我不能在这里使用它,因为我有很多变化的条件
查询应为:
SELECT DISTINCT t1.ID
FROM A t1 LEFT JOIN B t0 ON t1.ID=t0.A_ID AND t0.creator="currentUserValue"
WHERE (EXISTS (SELECT 1 FROM C t2 WHERE (((t2.A_ID = t1.ID) AND (t2.LABEL = "value1")) AND t2.VALUE LIKE "%value2%")) AND ((t0.ID IS NULL) OR (t0.HIDDEN = false)))
我试图将eclipseLink更改为2.7.7版本……查询有点改变,但仍然是错误的,a和B之间没有左连接
我非常感谢你对这个问题的帮助
SELECT DISTINCT t1.ID
FROM B t0, A t1
WHERE (EXISTS (SELECT 1 FROM C t2 WHERE (((t2.A_ID = t1.ID) AND (t2.LABEL = "value1")) AND t2.VALUE LIKE "%value2%")) AND ((t0.ID IS NULL) OR (t0.HIDDEN = false)))
SELECT DISTINCT t1.ID
FROM A t1 LEFT JOIN B t0 ON t1.ID=t0.A_ID AND t0.creator="currentUserValue"
WHERE (EXISTS (SELECT 1 FROM C t2 WHERE (((t2.A_ID = t1.ID) AND (t2.LABEL = "value1")) AND t2.VALUE LIKE "%value2%")) AND ((t0.ID IS NULL) OR (t0.HIDDEN = false)))