如何用Java CriteriaBuilder编写查询?
SELECT c FROM UserTransaction c WHERE c.status in ('M', 'P') AND
instr(c.idNumber,:idNum) > 0 order by c.userI
注意: idNum是一个变量
请看我开始写的东西。但是我不能编译它。
CriteriaBuilder cb = em.getCriteriaBuilder();
ParameterExpression<String> idnumParameter = cb.parameter(String.class, idNum);
ParameterExpression<Integer> numberParameter = cb.parameter(Integer.class)
CriteriaQuery<UserTransaction > cq = cb.createQuery(UserTransaction .class);
Root<UsasTransaction> postRoot = cq.from(UserTransaction .class);
Predicate predicateInM = cb.equal(postRoot.get("status"),"M");
Predicate predicateInP = cb.equal(postRoot.get("status"),"P");
Predicate predicateStatus = cb.or(predicateInM, predicateInP);
Predicate predicateInstr = (Predicate) cb.function("INSTR", Boolean.class, postRoot.get("idNumber"), idnumParameter );
Predicate predicateGt = cb.gt(predicateInstr, 0);
发布于 2019-06-19 20:34:52
So I ran the query slightly modified like this: List<String> statusList = new ArrayList<String>();
statusList.add("R");statusList.add("T");
CriteriaBuilder cb = em.getCriteriaBuilder();ParameterExpression idnumParameter = cb.parameter(String.class,idNum);
CriteriaQuery cq = cb.createQuery(UserTransaction .class);根postRoot = cq.from(UserTransaction .class);
表达式=postRoot.get(“状态”);谓词predicateStatus = expression.in(statusList);
//编辑返回整数表达式expressionInstr = cb.function("INSTR",Integer.class,postRoot.get("idNumber"),idnumParameter );谓词predicateGt = cb.gt(expressionInstr,0);
cq.select(postRoot).where(cb.and(predicateStatus,predicateGt));cq.orderBy(cb.asc(postRoot.get("usasOutRecId")));
UserTransactions = em.createQuery(cq).getResultList();
但我收到这个错误: org.hibernate.QueryException:并非所有命名参数都已设置: param2
https://stackoverflow.com/questions/56657821
复制相似问题