Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何建立一个;在;JPA中使用谓词的子句?_Sql_Jpa_Predicatebuilder - Fatal编程技术网

Sql 如何建立一个;在;JPA中使用谓词的子句?

Sql 如何建立一个;在;JPA中使用谓词的子句?,sql,jpa,predicatebuilder,Sql,Jpa,Predicatebuilder,我想建立一个查询,通过“Role”和“Id”列表来返回匹配的数据,但我不能很好地理解语法应该是什么 我试着用只使用“equal”子句来遵循工作示例,但它不起作用。代码如下 public static Specification<CustomerUser> findByIdsAndRole(List<Long> ids, String role) { return new Specification<CustomerUser>() {

我想建立一个查询,通过“Role”和“Id”列表来返回匹配的数据,但我不能很好地理解语法应该是什么

我试着用只使用“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]));
        }
    };
}
公共静态规范findByIdsAndRole(列表ID,字符串角色){
返回新规范(){
私有静态最终长serialVersionUID=-3381908547196927973L;
公共谓词toPredicate(根根、CriteriaQuery查询、CriteriaBuilder){
列表谓词=新的ArrayList();
如果(id!=null){
add(builder.in(root.get(“id”),id));
add(builder.equal(root.get(“角色”),role));
}
返回builder.and(谓词.toArray(新谓词[0]);
}
};
}
它给了我一个错误,它告诉我从中删除参数“id”。但是如果我像这样运行代码,我会得到以下错误日志:


org.postgresql.util.psqleexception:ERRO:syntax error at or near“”

请尝试
谓词.add(root.get(“id”).in(ids))

是的,它很有效!谢谢,这是预期的语法。