考虑以下符合 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 PostalAddress
to PostalAddressType
。我猜,这是通过子句p.type.displayOrder
中的片段暗示的。WHERE
在第二个中,有一个明确的JOIN
.
这些查询是否等效?
它们是否也等同于:
SELECT p
FROM PostalAddress p
WHERE p.constituent.id = :constituentId
ORDER BY p.type.displayOrder
...?
似乎是这样。在这些情况下,显式JOIN
s(在PostalAddress
和之间、和和Constituent
之间)是否有任何帮助(除了可读性和显式性)?PostalAddress
PostalAddressType
为了完整起见,我知道JOIN
如果路径表达式计算为集合,则始终需要 a ;我(目前:-))对此案不感兴趣。