JQL多对多选择:项目不在项目中

时间:2015-03-29 14:04:10

标签: hibernate java-ee jpa

当我们有这个结构时:

@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中的所有行的情况下这样做。

1 个答案:

答案 0 :(得分:2)

使用member of运算符有一种更好的方法:

select a from A a where :bInstance not member of a.b