【发布时间】:2011-12-17 05:53:31
【问题描述】:
我遇到了一个奇怪的情况:
我正在使用 jpa/hibernate 从 mySql DB 表中获取行,其中日期列大于或等于我发送的日期(删除了不相关的代码):
SELECT sp.* FROM spaceproduct sp where sp.enddate is null or sp.enddate >= :endDate)
在我的代码中我基本上是这样做的:
q.setParameter("endDate", new java.util.Date());
现在,我的问题是数据库中的日期是同一日期。即“今天”,它不会被拾取。我认为这是因为它以某种方式还将 java.util.date 的时间部分与数据库中的时间部分进行了比较(db 值仅为“2011-10-28”,但 java.util 日期为 2011-10-28T13:36 :43.130+0200)
但是,如果我将设置的日期参数更改为 java.sql.Date(),它会起作用!
现在,鉴于我的 mySql DB 列是日期,而不是日期时间,这不是错误吗?即使我发送了 java.util.date,它不应该只比较日期部分,因为我的 DB 列是日期吗?
编辑:我尝试使用 util-date 并将其转换为 sql-date。这实际上也不起作用:
java.util.Date utilDate = new java.util.Date();
java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime());
q.setParameter("endDate", sqlDate);
所以据我所知,我 也将 sql-dates 的时间部分设置为 0,除非我使用已弃用的“年-月-日”构造函数... p>
【问题讨论】:
-
不,这不是错误。 2011-10-28 不 >= 2011-10-28T13:36:43.130+0200。您的日期对象有 2011-10-28T13:36:43.130+0200,因此它失败了。然而,java.sql.Date 只存储日/月/年,或者更确切地说,它只在您调用 toString() 时返回,所以它等于 2011-10-28。
-
您好,感谢您的意见。看看我上面的编辑评论,说出你的想法
标签: java mysql hibernate date jpa