我的实体类如下
@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 数据 jpa 规范来做。以下代码不应该工作,因为区域是一个列表,我试图与单个值匹配。如何获取区域列表并与单个对象进行比较?
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>
最佳答案
尝试这个。这应该工作
criteriaBuilder.isMember(regionalEntity, root.get("userProfile").get("country").get("regions"))
您可以通过覆盖
Equals
来定义相等的条件。 Region类中的方法(也是Hashcode)
关于Spring 数据 jpa 规范 : How to filter a parent object by its children object property,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47867124/