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

时间:2018-12-24 13:55:09

标签: jpa criteria-api

文档说:

  

为文字创建表达式

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

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

但是,如果在此处省略 wordLiteral ,而使用 word ,则没有任何变化。那么这种方法是干什么的呢?

1 个答案:

答案 0 :(得分:0)

like的情况下它可以工作,因为它确实有overloaded versio n以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))
        )
);