1

考虑以下符合 JPA 2.0 的 JPQL 查询:

SELECT p
  FROM PostalAddress p
  JOIN p.constituent c
 WHERE c.id = :constituentId
 ORDER BY p.type.displayOrder

...和:

SELECT p
  FROM PostalAddress p
  JOIN p.constituent c
  JOIN p.type t
 WHERE c.id = :constituentId
 ORDER BY t.displayOrder

在这两种情况下,p.type都是@ManyToOne与另一个实体的关系 ( PostalAddressType)。

这两个查询的区别在于第一个查询没有明确JOIN的 from PostalAddressto PostalAddressType。我猜,这是通过子句p.type.displayOrder中的片段暗示的。WHERE在第二个中,有一个明确的JOIN.

这些查询是否等效?

它们是否也等同于:

SELECT p
  FROM PostalAddress p
 WHERE p.constituent.id = :constituentId
 ORDER BY p.type.displayOrder

...?

似乎是这样。在这些情况下,显式JOINs(在PostalAddress和之间、和和Constituent之间)是否有任何帮助(除了可读性和显式性)?PostalAddressPostalAddressType

为了完整起见,我知道JOIN如果路径表达式计算为集合,则始终需要 a ;我(目前:-))对此案不感兴趣。

4

1 回答 1

2

每次您想要左连接而不是内连接时都需要它。

于 2013-07-25T17:31:15.047 回答