我无法使JPA CriteriaBuilder equal()谓词区分大小写

时间:2018-06-20 16:54:00

标签: mysql hibernate jpa

我正在为某些应用程序构建REST接口,并使用JPA和Hibernate访问SQL数据库。

现在,我正在尝试检查给定的昵称是否已经存在。

我正在这样做:

CriteriaBuilder builder = this.entityManager.getCriteriaBuilder();
CriteriaQuery<DBUser> query = builder.createQuery(DBUser.class);
Root<DBUser> from = query.from(DBUser.class);
Predicate uniqueNickname = builder.equal(from.get(DBUser_.nickName),newNickname);
query.select(from).where(uniqueNickname);
if (this.entityManager.createQuery(query).getResultList().size() == 0) {
   //ok 
} else {
   //not ok
}

如果我现在在数据库中有一个用户TEst,并且newNickname =“ teST” 它将用户TEst放入结果列表。 (我检查了结果列表中的名称,并显示为TEst) 我正在使用mysql连接器“ mysql-connector-java-6.0.6.jar”。

1 个答案:

答案 0 :(得分:0)

通常,CriteriaBuilder#equal区分大小写,您可以通过比较大写变体形式的字符串来实现等于忽略大小写:

Predicate uniqueNickname = builder.equal(builder.upper(from.<String>get(DBUser_.nickName)),
                                         newNickname.toUpperCase());

在您的情况下,数据库完全忽略大小写。

检查MySQL数据库并更改排序规则设置(后缀为_ci的排序规则不区分大小写)