Criteriabuilder lower()vs Java toLowerCase()

BKa*_*aun 4 java hibernate jpa

根据这个链接

谓词lcSurnameLikeSearchPattern = criteriaBuilder.like(criteriaBuilder.(Person_.surname),是searchPattern.toLowerCase());

这看起来像Hibernate会生成一个类似的SQL

LOWER(PERSON.SURNAME) LIKE 'searchPattern'
Run Code Online (Sandbox Code Playgroud)

使用toLowerCase提供的任何实现,在Java中降低searchPattern的位置.而查询LOWER将使用Oracle实现.对于ASCII字符,我猜测事情很简单,但国际UTF字符会不会有差异?

如何在查询中让JPA降低LIKE的两个操作数?所以生成的查询看起来像

LOWER(PERSON.SURNAME) LIKE LOWER('searchPattern')
Run Code Online (Sandbox Code Playgroud)

Vla*_*čík 7

您可以使用两个表达式作为like方法参数并将literalString包装到Expression中:

Predicate lcSurnameLikeSearchPattern = criteriaBuilder.like(
  criteriaBuilder.lower(Person_.surname),
  criteriaBuilder.lower(criteriaBuilder.literal(searchPattern))
);
Run Code Online (Sandbox Code Playgroud)

CriteriaBuilder#像(表达式,表达式)

CriteriaBuilder#低级(表达式)

CriteriaBuilder#文字(T)

Person_.surname从你的例子中省略了定义.