我正在使用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',其搜索字词为:
感谢您的帮助!
干杯
修改
感谢@Neil的回答,我最终确定了解决方案:
// key and value are whitespace trimmed
predicate = builder.and(predicate,
builder.like(builder.lower(root.get(key)),
builder.lower(builder.literal("%"+ value +"%"))));