JPQL中何时需要显式JOIN?

时间:2013-07-25 15:30:38

标签: jpa

考虑以下符合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

两个查询的不同之处在于,在第一个查询中,JOINPostalAddress没有明确的PostalAddressType。我想,通过p.type.displayOrder子句中的WHERE片段暗示了这一点。在第二个中,有一个明确的JOIN

这些查询是否相同?

它们是否也等同于:

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

...

看来是这样。在这些情况下,明确的JOIN s(PostalAddressConstituent之间以及PostalAddressPostalAddressType之间)以任何方式提供帮助(除了可读性和明确性)?

为了完整起见,我了解如果路径表达式求值为集合,则始终需要JOIN;我不是(目前:-))对这种情况感兴趣。

1 个答案:

答案 0 :(得分:0)

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