我正在为某些应用程序构建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”。
答案 0 :(得分:0)
通常,CriteriaBuilder#equal
区分大小写,您可以通过比较大写变体形式的字符串来实现等于忽略大小写:
Predicate uniqueNickname = builder.equal(builder.upper(from.<String>get(DBUser_.nickName)),
newNickname.toUpperCase());
在您的情况下,数据库完全忽略大小写。
检查MySQL数据库并更改排序规则设置(后缀为_ci
的排序规则不区分大小写)