最近一个项目中出现这样的问题:项目中用到了hibernate,可是有一处代码中对时间进行比较原作者用数据库的函数将时间类型转换成字符串进行比较,结果换了一个数据库就用不了因为不同数据库类型转换的函数是不一样的。DB2中char(date),Postgres中to_char(date).
其实hibernate很大的一个特点就是屏蔽了数据库的差异,使用了hibernate就应该尽量HQL来操作数据库(除非不得不用数据库本身的一些特性),而对于时间类型的比较hibernate也是支持的。
HQL: and acceptDate<=:end
用一个时间类型来替换参数end:query.setDate("end",endDate);
顺便在提一个问题,我们经常碰到查询从A(起始时期)到B(结束日期)的纪录。
如果数据库中字段类型为timestamp,那么查询2005-11-23到2005-11-23的纪录时不会出现2005-11-23那一天的纪录,哪怕你的比较符号用的是>=和<=;因为数据库中的2005-11-23的纪录是这样的格式
2005-11-23 15:35:48:253,而query.setDate设置一个时间参数进去,他是用这个时间比较的
2005-11-23 00:00:00 000,
所以因该用query.
setTimeStamp("end",endDate);
如果从view层取到的date不包含后面的time信息,最好
endDate.