JPA递归LEFT OUTER JOIN

时间:2013-02-03 22:10:12

标签: jpa many-to-many jpql recursive-query

我有一个名为Status的实体,其中(除其他外)与自身有多对多的关系,代表“可能的下一个状态”。

我们的想法是能够创建状态之间转换的“地图”。

现在,我正在尝试生成一个尚未链接到给定状态的状态列表,以填充“链接到此状态”表单中的组合框(换句话说,我希望这些状态可以使用被链接)。

到目前为止,我发现了25种不这样做的方法。 :)

好的,所以很多人都在询问更多细节 - 我认为有些事情在合理的数据库设计方面被认为是理所当然的(并且它们对答案并不重要)。

a)所有状态都有一个且只有一个KEY列,即主键。

b)状态通过连接表彼此“连接”,连接表有2个外键,两个都是状态的主键。

c)如果我有状态A,B,C和D - 并且我已经将状态B和C“链接”到A,那么我有:A - > B和A - > C的目的是找到状态表中存在的那些尚未连接到'A'的状态。当我说'A'时,我指的是作为参数给出的状态。所以,如果我在查看状态A,我希望所有那些没有连接到'A'的人。如果我查看状态C,我希望所有那些未连接到状态C的人,无论他们是否连接到不同的状态。

任何帮助将不胜感激。 我不是一字寻找一个确切的查询,我正在寻找'它可以做的方式'。我将很容易弄清楚如何在我的特定数据库设计中应用该原则,但我无法找到要应用的“原则”。

1 个答案:

答案 0 :(得分:1)

select notLinkedStatus from Status notLinkedStatus
where notLinkedStatus.id not in
    (select linkedStatus.id from Status status
     inner join status.linkedStatuses linkedStatus
     where status.id = :theStatusId)