gpt4 book ai didi

mysql - 我无法让 JPA CriteriaBuilder equal() 谓词区分大小写

转载 作者:行者123 更新时间:2023-11-29 17:26:08 25 4
gpt4 key购买 nike

我正在为某些应用程序构建 REST 接口(interface),并使用 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)我正在使用 mysql 连接器“mysql-connector-java-6.0.6.jar”。

最佳答案

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

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

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

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

关于mysql - 我无法让 JPA CriteriaBuilder equal() 谓词区分大小写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50953382/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com