HQL使用中遇到的一个有关问题
HQL使用中遇到的一个问题
在使用HQL查询语句的过程中,遇到一个问题,数据库用的mysql.
相关的hql语句如下:
FROM TLogInfo t
WHERE 1=1
AND substr(t.operateTime ,0, 10) >= '2010-01-23'
具体的过程如下:
系统原来使用的oracle数据库,在使用oracle数据库时,这个语句是可以正常执行的。
后来把数据库改为mysql之后,这个hql语句无法查询出正确的结果,当然也不并不报错。
原因分析:
经过分析后发现,在oracle中,截取字符串的函数substr(string,start,len)中的第二个参数,最小值可以取0,而在mysql中对应的函数substr,第二个参数最小值是1,这就是导致问题出现的原因。
感想:
不知道这能不能算是hibernate的一个小bug,如果hibernate在使用mysql方言解析hql语句的时候,能做个处理,如果substr函数的第二个参数是0,则将其改为1,hibernate使用起来会更方便。
在使用HQL查询语句的过程中,遇到一个问题,数据库用的mysql.
相关的hql语句如下:
FROM TLogInfo t
WHERE 1=1
AND substr(t.operateTime ,0, 10) >= '2010-01-23'
具体的过程如下:
系统原来使用的oracle数据库,在使用oracle数据库时,这个语句是可以正常执行的。
后来把数据库改为mysql之后,这个hql语句无法查询出正确的结果,当然也不并不报错。
原因分析:
经过分析后发现,在oracle中,截取字符串的函数substr(string,start,len)中的第二个参数,最小值可以取0,而在mysql中对应的函数substr,第二个参数最小值是1,这就是导致问题出现的原因。
感想:
不知道这能不能算是hibernate的一个小bug,如果hibernate在使用mysql方言解析hql语句的时候,能做个处理,如果substr函数的第二个参数是0,则将其改为1,hibernate使用起来会更方便。