Java JPA查询不返回任何数据
我有以下JPA查询:Java JPA查询不返回任何数据,java,sql-server,hibernate,jpa,jtds,Java,Sql Server,Hibernate,Jpa,Jtds,我有以下JPA查询: @Query(value = "select r FROM TableEntity r where r.time=?1") TableEntity findByTime(java.sql.Timestamp time); 该查询非常简单,应该根据一段时间获取数据库行。它在MYSQL和Oracle中非常有用,但在MSSQL中不起作用。我已经通过Hibernate和JTDS驱动程序调试了查询,并在准备好的语句中成功地解析了时间戳,我可以看到查询中的小时、分钟、秒和毫秒的确
@Query(value = "select r FROM TableEntity r where r.time=?1")
TableEntity findByTime(java.sql.Timestamp time);
该查询非常简单,应该根据一段时间获取数据库行。它在MYSQL和Oracle中非常有用,但在MSSQL中不起作用。我已经通过Hibernate和JTDS驱动程序调试了查询,并在准备好的语句中成功地解析了时间戳,我可以看到查询中的小时、分钟、秒和毫秒的确切数量,就像在数据库行中一样。但是,不会返回任何数据
class TableEntity {
@Type(type = "timestamp")
private Timestamp time;
}
我怀疑有几毫秒的舍入发生了,或者它们不知怎么搞得一团糟,因为查询确实会很偶然地返回一些东西
数据库中的“我的时间”字段是datetime2(3)
我正在使用net.sourceforge.jtds1.3驱动程序
时间的格式是这样的:2020-06-03 13:02:21.273,我用毫秒工作
编辑:
我试着写一个简单的陈述,结果如下:
从表格实体r中选择r,其中r.time=?1
preparedStatement.setTimestamp(1,timestamp)//不起作用
preparedStatement.setString(1,timestamp.toString())//像个符咒一样工作
有什么想法吗?所以,Hibernate在查询DB时,在引擎盖下,将时间戳映射到了datetime类型(我得出结论,使用MSSQL分析器)。因为我在DB中有datetime2,所以在DB级别比较datetime和datetime2不会返回任何内容,即使它们在毫秒内完全相同
解决方案是强制将时间戳映射到datetime2,以便使用相同的类型来查询db datetime2类型时间的格式是如何设置的?我的意思是在您的代码中(
SimpleDateFormat
模式)如下所示:2020-06-03 13:02:21.273运行SQL Server Profiler以捕获实际执行的语句和参数。请检查日期的小时数是否匹配。这可能与此无关,但只是在列表上打勾:@Alex np…已发布