В чем разница между вариантами JPA «Присоединяйтесь и получайте»? - PullRequest
0 голосов
/ 27 марта 2019

Предположим, у меня есть сущность 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 и когда мне следует использовать один вместо другого?

...