在通过Hibernate JPA访问的数据库中给出这两个实体,
@Entity class A {
int id;
String aName;
}
@Entity class B {
int id;
String bName;
@ManyToMany Set<A> aRefs;
}
我想要的结果是B实体引用的不的所有A实体的aName
的集合。或换句话说,所有A
都不属于任何B
的{{1}}。
我已尝试使用aRefs
和NOT EXISTS
进行子选择,甚至涉及NOT MEMBER OF
s的多种替代方案,但令人烦恼的是我提出的查询要么被Hibernate拒绝了解释器甚至最终被翻译成被Oracle拒绝的无效SQL。
答案 0 :(得分:2)
这是我的头脑 - 所以我不确定这是否有效或者对你来说是正确的解决方案。
在实体A中添加关系的另一面
@Entity class A {
int id;
String aName;
@ManyToOne B bref;
}
然后你可以创建一个ejb-ql语句来表示“SELECT a FROM a a a WHERE a.b is NULL”
答案 1 :(得分:0)
有效的2个查询是:
SELECT a FROM A a WHERE NOT EXISTS
(SELECT b FROM B b JOIN b.arefs ba WHERE a = ba)
和
SELECT a FROM A a WHERE a NOT IN
(SELECT ba FROM B b JOIN b.arefs ba)