JPQL - 与OR的多个连接

时间:2013-05-08 15:24:44

标签: jpa jpql

我正在使用JPA,并想知道构建此查询的最佳方法。

这是我的数据模型(这完全是人为的,非感性的):
表“Thing”与表“Height”“Width”和“Length”具有多对多关系 高度,宽度,长度与表“创作者”

之间存在多对一关系

对于给定的东西,我希望所有的创造者与高度,宽度或长度中的至少一个相关联(注意,单个物体可以有很多高度 - 正如我所说的那样)。

例如,如果我只关心身高,我会这样做:

SELECT c FROM Creator c
INNER JOIN c.heights height
WHERE height.thing = :thing

有没有办法用OR指定多个内连接?我假设多个内连接将作为布尔AND。

这是我目前最好的猜测:

SELECT c FROM Creator c
WHERE EXISTS (SELECT h FROM Height h WHERE h.creator = c AND h.thing = :thing)
OR EXISTS (SELECT w FROM Width w WHERE w.creator = c AND w.thing = :thing)
OR EXISTS (SELECT l FROM Length l WHERE l.creator = c AND l.thing = :thing)

有没有更好的方法来构建此查询?我的真实案例在高度 - 宽度 - 长度集合中有大约10个元素。

1 个答案:

答案 0 :(得分:0)

只要关系存在,OR就可以使用内连接(只要创建者有任何高度,无论你的条件如何)。如果关系为空或为null,则需要使用外连接或子选择。

我相信,外连接比子选择更好,但它可能取决于数据库。

相关问题