[英]JPA Specification with @ManyToMany property
我有 2 個與 @ManyToMany 關系相關的實體:
public class EntityA {
@Id
private Long id;
.
.
.
@ManyToMany(fetch = fetchType.EAGER)
private List<EntityB> listOfB;
}
我想創建 JPA 規范,它將通過 EntityB 的 id 查詢 IN 子句。 我努力了
private static Specification<EntityA> listOfB(String path, List<Long> idsOfB) {
return (root, query, cb) -> {
//path is passed as "listOfB"
return root.get(path).in(idsOfB);
};
}
但我得到org.postgresql.util.PSQLException: ERROR: syntax error at or near "."
您沒有顯示失敗的 SQL,所以我只能猜測出了什么問題。 一個可能的問題是 id 列表為空。
由於您正在編寫您正在傳遞listOfB
,因此真正的問題是您正在將實體與長列表進行比較,這是行不通的。
您要么需要使用引用對象,即代理,要么使用idsOfB.stream().map(id -> em.getReference(EntityB.class, id)).collect(toList())
或加入listOfB
。
我認為您真正想要的是使用 EXISTS 謂詞。 像這樣的東西:
private static Specification<EntityA> listOfB(String path, List<Long> idsOfB) {
return (root, query, cb) -> {
Subquery<Integer> subquery = query.subquery(Long.class);
Root<EntityA> root = subquery.correlate(root);
subquery.where(root.join(path).get("id").in(idsOfB));
subquery.select(cb.literal(1L));
return cb.exists(subquery);
};
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.