Hibernate日期映射问题

时间:2010-07-27 10:27:34

标签: java hibernate datetime

我正在使用SQL Server数据库和Hibernate。我有以下与存储日期相关的问题:

我有以下代码:

String hql = "select user from User user where user.createDate = :date";
Query query = HibernateUtil.getSession().createQuery(hql);
Date date2 = DateHelper.getEndOfDay(new Date());//this returns 2010-07-27 23:59:59.999
query.setParameter("date", date2);

当我比较日期2010-07-27 23:59:59.999时,我得到的结果是日期:2010-07-28 00:00:00.0。使用setDate()而不是setParameter()将返回保存日期在同一天的用户,这意味着将丢弃小时,分钟等。

hibernate将日期映射到java.util.Date,但在结果列表中,所有内容都是Timestamp,因为Timestamp扩展了java.util.Date。 为了在比较平等时取得好成绩,你有什么建议?

3 个答案:

答案 0 :(得分:1)

您是否尝试过Query.setDate()Query.setTimestamp()

答案 1 :(得分:1)

我认为问题在于MSSQL数据库,因为它以3毫秒的精度保存日期,如this帖子的答案中所示。

所以问题是因为时间23:59:59.999无法保存在MSSQL中(可能具有3毫秒的精度,当你比较从数据库中检索的时间时,你不能得到999这次必须转换,当将它转换为某个MSSQL兼容日期,它最终会在第二天结束。

我认为这是我在这里看到的真正问题。为了避免这种情况,我想我应该格式化我正在保存的日期。

答案 2 :(得分:0)

如果可能,建议您使用JODA DateTime API。使用DateTime中的PersistentDateTime Hibernate User Type类将joda-hibernate project对象保留到数据库。