1

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

这是我的数据模型(这完全是人为的和毫无意义的):
表“事物”与表“高度”“宽度”和“长度”具有多对多关系
高度,宽度,长度每个都有很多 -与表“创建者”的一对一关系

对于给定的事物,我希望所有创建者与高度、宽度或长度中的至少一个相关联(请注意,单个事物可以有多个高度 - 正如我所说的那样,这是人为的)。

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

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)

有没有更好的方法来构造这个查询?我的真实案例在 height-width-length 集合中有大约 10 个元素。

4

1 回答 1

0

只要关系存在(只要造物主有任何高度,无论您的状况如何),OR 就可以使用内部连接。如果关系为空或 null,则需要使用外连接或子选择。

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

于 2013-05-09T13:11:44.683 回答