最近一个项目中出现这样的问题:项目中用到了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.setHours(23);
endDate.setMinutes(59);
endDate.setSeconds(59);
对开始时间
startDate.setHours(0)
startDate.setMinutes(0);
startDate.setSeconds(0);
这样就是查询 A-0:0:0 到 B-23:59:59时间段的数据
在使用Hibernate的项目中,遇到将日期转换为字符串进行比较的问题,这在更换数据库时造成不兼容。文章强调了Hibernate能屏蔽数据库差异,推荐使用HQL进行时间比较,例如`and acceptDate<=:end`并配合`query.setDate("end", endDate)`。同时提醒,当查询日期区间时,若数据库字段为timestamp,需考虑时间部分,确保正确设置时间参数以获取完整日期的记录。建议对开始和结束时间设置精确到秒,避免丢失数据。"
120659738,11175585,微信小程序用户数据获取与交互指南,"['微信小程序', '用户信息', 'API交互']
972

被折叠的 条评论
为什么被折叠?



