解决Derby默认大小写敏感的问题
Derby的column值默认是大小写敏感的,查询的时候必须注意这个问题。
但是在客户端传过来的数据可能是千奇百怪的,如果数据库里存的是”Name”,传过来的是“name”就会查不到,但是不能要求客户端那么严格,一般来说,Name和name是一样的。
昨天,我研究了一下,找到一种非常麻烦的解决方法,那就是在创建表的时候加一个column,此column的值引用自某一个column,并且自动转为全大写或全小写,sql 语句如下:
-
(
-
employeeID int,
-
name varchar( 50 ),
-
caseInsensitiveName GENERATED ALWAYS AS( UPPER( name ) )
-
)
-
;
然后,在POJO类要增加一个attribute来对应这个column,当然了,在映射文件同样要加相应的property。
在然后,在需要查询employee的name时,将客户端传入的值先转为大写,注意,这时就不能去查询name这个column了,要查询caseInsensitiveName 。
瞧瞧,是不是很复杂啊。所以,我不推荐用这个方法。
今天我找到一种更简单的方法,废话少说,开始。
其实,在Derby中,支持这样的写法:
select * from employee where upper(name) =’WANG LIHONG’;
所以,我们不需要增加column,也不需要去改POJO和映射文件,只需要在查询时先把客户端传来的值变成大写,再用以下语句查询就好。
如果用HQL(最好用占位符,不要像我这样写,我这里举例就随便一点了):
” from Employee where upper(name)=”+”‘”+upperCname+”‘”;
如果用Criteria,需要用sqlRestriction()方法:
.add(Restrictions.sqlRestriction(“upper(cname)=?”,upperCname,Hibernate.STRING));
相关日志
日志信息 »
-
好专业的东西哈,菜鸟的大排路过



