【发布时间】:2020-09-22 05:56:04
【问题描述】:
我有以下 JPA 查询:
@Query(value = "select r FROM TableEntity r where r.time=?1")
TableEntity findByTime(java.sql.Timestamp time);
该查询非常简单,应该根据某个时间获取数据库行。它适用于 MYSQL 和 Oracle,但不适用于 MSSQL。我已经通过 Hibernate 和 JTDS 驱动程序调试了查询,并看到 Timestamp 在 Prepared 语句中成功解析,我可以看到查询中的确切小时数、分钟数、秒数和毫秒数,就像我在数据库行中一样。但是,不会返回任何数据。
class TableEntity {
@Type(type = "timestamp")
private Timestamp time;
}
我怀疑发生了一些毫秒舍入,或者它们以某种方式被搞砸了,因为查询确实会在蓝月亮中返回一次!
我在数据库中的时间字段是 datetime2(3) 我正在使用 net.sourceforge.jtds 1.3 驱动程序。
时间格式如下:2020-06-03 13:02:21.273,我正在使用毫秒
编辑: 我尝试编写简单的准备好的语句,结果如下:
select r FROM TableEntity r where r.time=?1
preparedStatement.setTimestamp(1, 时间戳); //不起作用...
preparedStatement.setString(1, timestamp.toString()) //就像一个魅力
有什么想法吗?
【问题讨论】:
-
time的格式如何?,我的意思是在你的代码中(SimpleDateFormat模式) -
像这样:2020-06-03 13:02:21.273
-
运行 SQL Server Profiler 捕获实际执行的语句和参数。
-
请检查日期的小时数是否匹配。这可能无关紧要,只是为了勾选列表:stackoverflow.com/questions/23267971/…
-
@Alex np ....已发布
标签: java sql-server hibernate jpa jtds