Hibernate3.x Query setDate() 问题

在使用Hibernate 3.x进行时间区间查询时,发现setDate()方法无法正确匹配到2019-07-01的数据。原因是Hibernate在遇到'='时会截取日期的时分秒部分。解决方法包括:1) 使用setCalendar();2) 使用setTimestamp();3) 将setDate()替换为setString(),以字符串形式进行查询。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近使用Hibernate (版本为3.x) 做条件查询时,用到了时间区间段检索,但是当用setDate()时遇到了一个问题,如下

假如 :
startTime = 2019-07-01 00:00:00
endTime = 2019-07-01 23:59:59

并且数据库有一条2019-07-01的记录

Query query = session.createQuery("from User u where u.createTime>=? and u.createTime<=?");   
query.setDate(0, startTime );   
query.setDate(1, endTime );  

 经过上面的调用却查询不到 2019-07-01 的数据,但在数据库中通过sql: 

select *  from t_user u where u.createTime>='2019-07-01 00:00:00' and u.createTime<= '2019-07-01 59:59:59'

却可以查到该条记录,后来经过网上的资料翻阅,结论如下:

 因为Query对象的setDate()方法在赋值时,若条件中带有 "=" 号,HIbernate默认把赋值日期后面的时分秒给截取掉,只留下了年月日,如果只是通过 ">" 或者 "<" 进行日期比较是没问题的。

有三种方法可以解决这个问题:

1、通过setCalendar()赋值

2、通过setTimestamp()赋值

3、将setDate()更改为setString(),使用字符串的形式做查询也是可以的正常查询,如:

Query query = session.createQuery("from User u where u.createTime>=? and u.createTime<=?");   
query.setString(0, "2019-07-01 00:00:00");   
query.setString(1, "2019-07-01 59:59:59");   

该问题最终通过上述方法得到了解决!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值