JPA CriteriaBuilder 和子字符串

Jåc*_*cob 1 java jpa eclipselink criteria-api jpa-2.0

我有一个 CriteriaBuilder,我试图在其中获取从 0 到 10 的字符。但是我无法获得所需的输出。

    CriteriaBuilder cb = em.getCriteriaBuilder();
    CriteriaQuery<Emp> cq = cb.createQuery(Emp.class);
    Root<Emp> c = cq.from(Emp.class);
    cb.substring(c.<String>get("projDesc"), 0, 10);
    cq.orderBy(cb.desc(c.get("salary")));
    Query query = em.createQuery(cq);
    .....
Run Code Online (Sandbox Code Playgroud)

这可能是什么原因?

And*_*dré 5

来自javadoc

创建用于子字符串提取的表达式。从指定位置开始提取给定长度的子字符串。第一个位置是 1。

尝试做 cb.substring(c.<String>get("projDesc"), 1, 10);


我想你忘记选择 Expression<E>

尝试cq.select(cb.substring(c.<String>get("projDesc"), 1, 10)) 它会返回List<String>如果您需要返回Emp您可以使用

cb.construct(Emp.class, e.get("prop1"), e.get("prop2"), cb.substring(c.<String>get("projDesc"), 1, 10)));