我有此代码:
CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder();
CriteriaQuery<Integer> criteriaQuery = criteriaBuilder.createQuery(Integer.class);
Root<Teacher> c = criteriaQuery.from(Teacher.class);
Expression s = criteriaBuilder.locate(c.<String>get("fam"), "-").as(Integer.class);
Integer lastIndex = Integer.valueOf(s.toString());
criteriaQuery.select(criteriaBuilder.max(criteriaBuilder.substring(c.<String>get("fam"), 1, lastIndex-1).as(Integer.class)));
Integer aaa = em.createQuery(criteriaQuery).getSingleResult();
s
变量给我整数。我想将其用作substring
函数的参数。我怎样才能做到这一点?此方法无效。
您可以使用类似这样的内容:
Expression<Integer> s = criteriaBuilder.locate(c.get("fam"), "-");
Expression<Integer> one = criteriaBuilder.literal(1);
criteriaQuery.select(
criteriaBuilder.max(
criteriaBuilder.length(
criteriaBuilder.substring(
c.get("fam"),
one,
criteriaBuilder.diff(s, one)
)
)
)
);
Integer aaa = em.createQuery(criteriaQuery).getSingleResult();
请注意,不能将criteriaBuilder.max
应用于criteriaBuilder.substring
的输出。因为criteriaBuilder.substring
返回Expression<String>
,但是criteriaBuilder.max
期望获得Expression<N extends Number>
。