什么是CriteriaBuilder literal()方法?

问题描述 投票:0回答:1

文件说:

为文字创建表达式

在代码中我看到了cb.literal()的这种用法:

  Expression<String> wordLiteral = cb.literal(word);
  predicates.add(cb.like(namePath, wordLiteral));

但是如果在这里省略wordLiteral并使用word代替,则没有任何改变。那么这种方法是什么?

jpa criteria-api
1个回答
0
投票

like的情况下,它有效,因为它确实有overloaded version,它将String作为参数。

Predicate创建还有其他几种方法只接受表达式。

为了举例,我们可以采取length。只有一个,它需要Expression<String>作为参数。如果我们有实体User和字段account并且基于用户输入,我们必须找到account具有相同长度的用户,可以按如下方式完成:

String accountInput = "Jack";

CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<User> cq = cb.createQuery(User.class);

Root<User> root = cq.from(User.class);

cq.select(root)
   .where(
        cb.equal(
            cb.length(root.get("account")),
            cb.length(cb.literal(accountInput))
        )
);
© www.soinside.com 2019 - 2024. All rights reserved.