私のエンティティクラスが春データ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仕様でそれをしたい。リージョンはリストであり、単一の値と一致させようとしているので、以下のコードは機能しません。地域リストを取得して単一のオブジェクトと比較する方法
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からJOIN FETCHを実行u.userProfile.country.reg ur ur ur.name –