当我们有这个结构时:
@Entity
public class A {
....
@ManyToMany(mappedBy = "a")
public Set<B> getB() {
return b;
}
和
@Entity
public class B {
...
@ManyToMany
public Set<A> getA() {
return a;
}
我们如何查询实体A以获取给定b值不在Set<B>
的行?我的意思是,得到所有A,它们不会在Set<B>
中给出b。
我正在尝试这个解决方案:
from A where :bInstance not in b
和
select a from A a where a not in (b.a from B b where b.name = :name)
和
select a from A a where a not exists (b.a from B b where b.name = :name)
但没有运气。
我知道我可以通过查询所有A然后迭代它并过滤来完成它,但我想在不查询db中的所有行的情况下这样做。
答案 0 :(得分:2)
使用member of
运算符有一种更好的方法:
select a from A a where :bInstance not member of a.b