[英]Hibernate is returning query result in lower case
我正在构建一个 URL 缩短服务。 从短网址检索长网址时,休眠会自动将大小写更改为较小的大小写。 例如,在我的 SQL 数据库中,我有两行,其中一行包含“bN”数据,另一行包含“bn”
表格图片: https : //i.stack.imgur.com/lwPjD.png
我的桌子看起来像这样
id | longurl | shorturl |
1 | http://..| bn |
2 | httP://..| bN |
我正在查询“bN”,但休眠给了我“bn”的结果。
这里是 LINK 对象的定义
package com.saikat.model;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name="urldetails")
public class Link {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name ="id")
private int key;
@Column(name ="shortUrl")
private String shortUrl;
@Column(name ="longUrl")
private String longUrl;
public int getKey() {
return key;
}
public void setKey(int key) {
this.key = key;
}
public String getShortUrl() {
return shortUrl;
}
public void setShortUrl(String shortUrl) {
this.shortUrl = shortUrl;
}
public String getLongUrl() {
return longUrl;
}
public void setLongUrl(String longUrl) {
this.longUrl = longUrl;
}
}
下面是获取详细信息的代码
@Transactional
public Link getLink(String Link) {
Session currentSession = sessionFactory.getCurrentSession();
//Link l =currentSession.get(Link.class,8);
Query query=currentSession.createQuery("from Link where shortUrl= :shortUrl");
query.setParameter("shortUrl", Link);
List<Link> link = query.getResultList();
Link l = new Link();
try {
l = link.get(0);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return l;
}
在函数 getLink 中,我传递的是“bN”的短链接。 但是当休眠返回结果时,它给出了“bn”行的结果。 我已经在调试模式下检查过它。
调试模式的图像:
这是查询的日志
Hibernate: select link0_.id as id1_0_, link0_.longUrl as longurl2_0_, link0_.shortUrl as shorturl3_0_ from urldetails link0_ where link0_.shortUrl=?
13:55:11,135 TRACE BasicBinder:64 - binding parameter [1] as [VARCHAR] - [bN]
13:55:11,138 TRACE BasicExtractor:60 - extracted value ([id1_0_] : [INTEGER]) - [1]
13:55:11,146 TRACE BasicExtractor:60 - extracted value ([longurl2_0_] : [VARCHAR]) - [https://www.google.com]
13:55:11,146 TRACE BasicExtractor:60 - extracted value ([shorturl3_0_] : [VARCHAR]) - [bn]
13:55:11,147 TRACE BasicExtractor:60 - extracted value ([id1_0_] : [INTEGER]) - [2]
13:55:11,147 TRACE BasicExtractor:60 - extracted value ([longurl2_0_] : [VARCHAR]) - [https://stackoverflow.com/questions/68155013/hibernate-is-returning-query-result-in-lower-case?noredirect=1#comment120462353_68155013]
13:55:11,147 TRACE BasicExtractor:60 - extracted value ([shorturl3_0_] : [VARCHAR]) - [bN]
我正在使用 MYSQL 并将我的数据库的排序规则更改为latin1_general_cs
在日志中,我观察到 hibernate 正在查询bN ,这是正确的 bt 'bn' 和 'bN'的结果都出现了
默认情况下,非二进制字符串比较不区分大小写
您可以切换到二进制字符串:
对于二进制字符串(BINARY、VARBINARY、BLOB),比较使用操作数中字节的数值; 这意味着对于字母字符,比较区分大小写。
更多选项和解释为什么BINARY
不是你想要的可以在如何在 MySQL 上进行 SQL 区分大小写的字符串比较中找到?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.