使用Spring Data JPA在NamedNativeQuery中使用TIMESTAMP

时间:2017-07-20 04:30:09

标签: oracle hibernate spring-data

方案是从OracleDB获取值,其中一个搜索输入是DateTime,格式为“07/11/2017 10:12:16 AM”(这是一个字符串)和DB列是TIMESTAMP。

列中的数据以“07/11/2017 10:12:16 AM”格式保存,但它是TIMESTAMP。

从Oracle DB查询时,可以使用 TO_TIMESTAMP 函数将搜索输入转换为适当的TIMESTAMP

实施例 select * from Table where SI_ID='12345'and COLUMN >= TO_TIMESTAMP ('07/11/2017 10:12:16 AM', 'mm/DD/YYYY HH:MI:SS AM';

我需要使用Spring Data JPA和NamedQuery在Java中实现相同的功能。 从JPA存储库调用NativeNamedQuery如下

@Query(name = "Sample.findRecordByIdAndTime", nativeQuery = true)
 Sample findByIdAndTime (@Param("id") Long id, @Param("timestamp") String timestamp);

但是如何将字符串转换为从JPA存储库调用的Named查询中的TIMESTAMP,如下所示:

@NamedNativeQuery(name="Sample.findRecordByIdAndTime", query="select * from TABLE where SI_ID= ? and TS_COLUMN >= TO_TIMESTAMP(?, 'mm/DD/YYYY HH:MI:SS AM')", resultClass = Sample.class)

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

您的查询应该有效(因为它是原生查询),只需添加绑定参数::id:timestamp

@NamedNativeQuery(name="Sample.findRecordByIdAndTime", 
                 query="select * from TABLE where SI_ID= :id 
                    and TS_COLUMN >= TO_TIMESTAMP(:timestamp , 'mm/DD/YYYY HH:MI:SS AM')", 
                 resultClass = Sample.class)