Java Criteria API - 在比较之前,从数据库中降低一个值

时间:2017-03-29 09:28:43

标签: java jpa criteria-api

我正在使用Criteria API,但遇到以下困难:

我想将搜索字词中的较低值与数据库中的较低值进行比较!

让我们说,我想在我的数据库中找到一些人。

以下代码使用某个键(例如“firstName”)和值(例如“John”)构建谓词

以下是我想要实现的一些简化版本:

CriteriaBuilder builder = entityManager.getCriteriaBuilder();
CriteriaQuery<People> query = builder.createQuery(People.class);
Root root = query.from(People.class);

Predicate predicate = builder.conjunction();

predicate = builder.and(predicate,
    builder.like(root.get(key), ("%"+ value +"%").toLowerCase() ) );

后来我说,我希望现在所有人都符合这个标准:

query.where(predicate);  
List<People> result = entityManager.createQuery(query).getResultList();

问题是我想要在数据库中小写Peoples的firstName,这样我就可以找到所有'John',其搜索字词为:

  • 'JOHN'
  • '约翰'
  • '噢'

感谢您的帮助!

干杯

修改

感谢@Neil的回答,我最终确定了解决方案:

// key and value are whitespace trimmed
predicate = builder.and(predicate,
    builder.like(builder.lower(root.get(key)),
        builder.lower(builder.literal("%"+ value +"%"))));

0 个答案:

没有答案