JPA 查询没有 return 任何数据
JPA query does not return any data
我有以下 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 语句中成功解析,我可以在数据库行中看到查询中的确切小时数、分钟数、秒数和毫秒数。但是,return 没有返回任何数据。
class TableEntity {
@Type(type = "timestamp")
private Timestamp time;
}
我怀疑发生了一些毫秒舍入,或者它们以某种方式被搞砸了,因为查询 return 千载难逢!
我在数据库中的时间字段是 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()) //很有魅力
有什么想法吗?
因此,在幕后,Hibernate 在查询数据库时将该时间戳映射到日期时间类型(我得出的结论是使用 MSSQL 分析器)。由于我在数据库中有 datetime2,因此在数据库级别比较 datetime 和 datetime2 不会返回任何内容,即使它们在毫秒内完全相同。
解决方案是强制将时间戳映射到 datetime2,以便使用相同的类型查询 db datetime2 类型
我有以下 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 语句中成功解析,我可以在数据库行中看到查询中的确切小时数、分钟数、秒数和毫秒数。但是,return 没有返回任何数据。
class TableEntity {
@Type(type = "timestamp")
private Timestamp time;
}
我怀疑发生了一些毫秒舍入,或者它们以某种方式被搞砸了,因为查询 return 千载难逢!
我在数据库中的时间字段是 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()) //很有魅力
有什么想法吗?
因此,在幕后,Hibernate 在查询数据库时将该时间戳映射到日期时间类型(我得出的结论是使用 MSSQL 分析器)。由于我在数据库中有 datetime2,因此在数据库级别比较 datetime 和 datetime2 不会返回任何内容,即使它们在毫秒内完全相同。
解决方案是强制将时间戳映射到 datetime2,以便使用相同的类型查询 db datetime2 类型