考虑以下符合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
到PostalAddress
没有明确的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
;我不是(目前:-))对这种情况感兴趣。
答案 0 :(得分:0)
每次想要左连接而不是内连接时都需要它。