내 엔티티 클래스가스프링 데이터 JPA 사양 : 자식이 부모 개체를 필터링하는 방법은 이제 특정 지역에있는 모든 사용자를 얻으려면 재산
@Entity
@table
public class User {
@OneToOne
private UserProfile userProfile;
// others
}
@Entity
@Table
public class UserProfile {
@OneToOne
private Country country;
}
@Entity
@Table
public class Country {
@OneToMany
private List<Region> regions;
}
를 따르고 있습니다 객체. 나는 SQL을 알고 있지만 봄 데이터 JPA 사양에 의해 그것을하고 싶다. region은리스트이고 하나의 값과 일치하려고하기 때문에 다음 코드는 작동하지 않아야합니다. 영역 목록을 가져 와서 단일 객체와 비교하는 방법은 무엇입니까?
public static Specification<User> userFilterByRegion(String region){
return new Specification<User>() {
@Override
public Predicate toPredicate(Root<User> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
return criteriaBuilder.equal(root.get("userProfile").get("country").get("regions").get("name"), regionalEntity);
}
};
}
편집 : 도움을 주셔서 감사합니다. 사실 나는 다음 JPQL에 대한 동등한 기준 쿼리를 찾고 있습니다
SELECT u FROM User u JOIN FETCH u.userProfile.country.regions ur WHERE ur.name=:<region_name>
도움을 주셔서 감사합니다.하지만 제 경우에는 작동하지 않습니다. jpa criteria 쿼리를 사용하여 다음을 번역해야합니다. FROM 사용자 u 조인 FETCH u.userProfile.country.regions ur WHERE ur.name –