我的实体类以下春数据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,但我想通过spring data jpa Specification来完成。下面的代码不应该工作,因为地区是一个列表,我试图匹配一个单一的值。如何获取区域列表并与单个对象进行比较?
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条件查询。 FROM User你好JOIN FETCH u.userProfile.country.regions你在哪里你的名字 –