假设我有一个实体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
有什么区别?何时应该使用一个而不是另一个?