CriteriaBuilder 的literal() 方法有什么用?

Eka*_*ina 8 jpa criteria-api

文档说:

为文字创建表达式

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

  Expression<String> wordLiteral = cb.literal(word);
  predicates.add(cb.like(namePath, wordLiteral));
Run Code Online (Sandbox Code Playgroud)

但如果这里省略wordLiteral并使用word代替,则不会发生任何变化。那么这个方法是做什么用的呢?

Mik*_*unu 4

如果like它有效,因为它确实有以 String 作为参数的重载版本。

还有其他几种仅接受表达式的谓词创建方法。

为了举例,让我们取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))
        )
);
Run Code Online (Sandbox Code Playgroud)