Предположим, у меня есть сущность Hotel
, которая имеет ссылку на сущность Address
, которая также имеет ссылку на сущность City
.
Когда я использую JPA Specifications
для поиска отеля по City
, я обнаружил, что в моем Specification
классе Join
и Path
дают одинаковый результат:
public Predicate toPredicate(Root<BidRequest> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
Path<Address> path = root.get("address").get("city");
Predicate p = cb.equal(path.get("id"), criteria.getId());
return p;
}
public Predicate toPredicate(Root<BidRequest> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
Join<Hotel,City> join = root.join("address");
Path<Integer> path = join.get("city");
Predicate p = cb.equal(path.get("id"), criteria.getId());
return p;
}
Так в чем же разница между root.join
и root.get
и когда мне следует использовать один вместо другого?