根据此Link
Predicate lcSurnameLikeSearchPattern = criteriaBuilder.like( criteriaBuilder。的下(Person_.surname), 是searchPattern的 toLowerCase ());
这看起来像Hibernate会生成一个类似于
的SQLLOWER(PERSON.SURNAME) LIKE 'searchPattern'
使用toLowerCase提供的任何实现,在Java中降低searchPattern的位置。而查询LOWER将使用Oracle实现。对于ASCII字符,我猜测事情很简单,但国际UTF字符会不会有差异?
如何让JPA降低查询中LIKE的两个操作数?所以生成的查询看起来像
LOWER(PERSON.SURNAME) LIKE LOWER('searchPattern')
答案 0 :(得分:4)
您可以将两个表达式用作like
方法参数,并使用literal
将字符串包装到表达式中:
Predicate lcSurnameLikeSearchPattern = criteriaBuilder.like(
criteriaBuilder.lower(Person_.surname),
criteriaBuilder.lower(criteriaBuilder.literal(searchPattern))
);
CriteriaBuilder#like(Expression,Expression)
CriteriaBuilder#lower(Expression)
我省略Person_.surname
定义,因为它来自您的示例。