【问题标题】:TIMESTAMP in NamedNativeQuery using Spring Data JPA使用 Spring Data JPA 在 NamedNativeQuery 中的 TIMESTAMP
【发布时间】:2017-12-25 14:08:48
【问题描述】:

场景是从 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 存储库调用的命名查询中将字符串转换为 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)

任何帮助将不胜感激。

【问题讨论】:

    标签: oracle hibernate spring-data


    【解决方案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)
    

    【讨论】:

    • 当我传递一个“?”时,查询中发生了一些意外行为而不是“:时间戳”。效果很好。谢谢
    猜你喜欢
    • 2013-07-10
    • 1970-01-01
    • 2012-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-10
    • 2021-07-03
    • 1970-01-01
    相关资源
    最近更新 更多