如何使用谓词在 JPA 中构建 "IN" 子句?
How to build an "IN" clause in JPA using Predicates?
我想通过 "Role" 和 "Id" 的列表对 return 我的数据进行查询,但我不太了解语法应该如何。
我试图按照仅使用 "equal" 子句的工作示例进行操作,但它不起作用。代码如下
public static Specification<CustomerUser> findByIdsAndRole(List<Long> ids, String role) {
return new Specification<CustomerUser>() {
private static final long serialVersionUID = -3381908547196927973L;
public Predicate toPredicate(Root<CustomerUser> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
List<Predicate> predicates = new ArrayList<>();
if (ids != null) {
predicates.add(builder.in(root.get("id"), ids));
predicates.add(builder.equal(root.get("role"), role));
}
return builder.and(predicates.toArray(new Predicate[0]));
}
};
}
它给我一个错误,它告诉我从中删除参数 "ids"。但是如果我 运行 这样的代码,我会得到这个错误日志:
org.postgresql.util.PSQLException:错误:“)”处或附近的语法错误
请尝试predicates.add(root.get("id").in(ids)));
。
我想通过 "Role" 和 "Id" 的列表对 return 我的数据进行查询,但我不太了解语法应该如何。
我试图按照仅使用 "equal" 子句的工作示例进行操作,但它不起作用。代码如下
public static Specification<CustomerUser> findByIdsAndRole(List<Long> ids, String role) {
return new Specification<CustomerUser>() {
private static final long serialVersionUID = -3381908547196927973L;
public Predicate toPredicate(Root<CustomerUser> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
List<Predicate> predicates = new ArrayList<>();
if (ids != null) {
predicates.add(builder.in(root.get("id"), ids));
predicates.add(builder.equal(root.get("role"), role));
}
return builder.and(predicates.toArray(new Predicate[0]));
}
};
}
它给我一个错误,它告诉我从中删除参数 "ids"。但是如果我 运行 这样的代码,我会得到这个错误日志:
org.postgresql.util.PSQLException:错误:“)”处或附近的语法错误
请尝试predicates.add(root.get("id").in(ids)));
。