请提供有关制定JPA查询的帮助

时间:2011-04-02 06:34:27

标签: java hibernate jpa

在通过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}}。

我已尝试使用aRefsNOT EXISTS进行子选择,甚至涉及NOT MEMBER OF s的多种替代方案,但令人烦恼的是我提出的查询要么被Hibernate拒绝了解释器甚至最终被翻译成被Oracle拒绝的无效SQL。

2 个答案:

答案 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)

3个人对这个问题表现出兴趣,所以我想我会分享我的答案。我主要通过反复试验来到这里;我很遗憾地说我还没有“理解”JPA查询语言。

有效的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)