JPA查询不返回任何数据

问题描述 投票:1回答:1

我有一个下面的JPA查询。

@Query(value = "select r FROM TableEntity r where r.time=?1")
  TableEntity findByTime(java.sql.Timestamp time);

这个查询很简单 应该是根据时间来获取数据库中的记录 在MYSQL和Oracle上可以正常工作,但在MSSQL上就不行了。我通过Hibernate和JTDS驱动调试了这个查询,看到Prepared语句中成功解析了Timestamp,我可以在查询中看到和我在数据库行中一样的时、分、秒、毫秒数。但是,没有返回任何数据。

class TableEntity {

    @Type(type = "timestamp")
    private Timestamp time;

}

我怀疑是发生了一些毫秒四舍五入的情况,或者是它们以某种方式被弄乱了,因为查询确实在蓝月亮中返回了一些数据。

我在数据库中的时间字段是datetime2(3)我使用的是net.sourceforge.jtds 1.3驱动。

时间的格式是这样的。2020-06-03 13:02:21.273, 我使用的是毫秒。

EDIT:我试着写了普通的准备语句,结果是这样的。

select r FROM TableEntity r where r.time=?

preparedStatement.setTimestamp(1, timestamp); /不起作用......

preparedStatement.setString(1, timestamp.toString()) /魅力无穷

有什么想法吗?

java sql-server hibernate jpa jtds
1个回答
1
投票

所以,在下面,Hibernate在查询DB时,是将该时间戳映射到datetime类型的(我用MSSQL剖析器得出的结论)。由于我在DB中有datetime2,所以在DB层面上比较datetime和datetime2并没有返回任何东西,即使它们的毫秒数完全相同。

解决方法是强制将时间戳映射到datetime2,这样db的datetime2类型就会被查询到相同的类型。

© www.soinside.com 2019 - 2024. All rights reserved.