我正在使用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个元素。
答案 0 :(得分:0)
只要关系存在,OR就可以使用内连接(只要创建者有任何高度,无论你的条件如何)。如果关系为空或为null,则需要使用外连接或子选择。
我相信,外连接比子选择更好,但它可能取决于数据库。