Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPA查询不返回任何数据_Java_Sql Server_Hibernate_Jpa_Jtds - Fatal编程技术网

Java 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驱动程序调试了查询,并在准备好的语句中成功地解析了时间戳,我可以看到查询中的小时、分钟、秒和毫秒的确

我有以下JPA查询:

@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…已发布