【问题标题】:JPQL query for timestampJPQL 查询时间戳
【发布时间】:2023-03-23 01:14:01
【问题描述】:

我正在使用 JpaPagingItemReader 创建批处理作业 我的查询在作业配置中如下所示:

<property name="queryString" value="SELECT a FROM EntityName a
                                        WHERE a.status = 'RUNNING'
                                        AND a.validTo = '2017-12-13'"/>

当我执行作业时,我收到以下异常:

java.sql.SQLDataException: ORA-01843: not a valid month

如何将正确的格式传递给查询以从数据库中获取?数据库中的列是普通sql中的时间戳我会这样做

SELECT * FROM EntityName
WHERE VALID_TO = to_timestamp('2017-12-12', 'yyyy-mm-dd')

【问题讨论】:

  • 不知JAVA TYPE是什么“validTo”字段...
  • 这是一个本地日期
  • 那么为什么要将 TIMESTAMP/DATE 字段与文本字符串进行比较?使用 LocalDate 作为参数
  • 如何将 LocalDate 作为参数传递?
  • 将 JPQL 更改为 SELECT a FROM EntityName a WHERE a.status = 'RUNNING' AND a.validTo = :myParam,就像任何 JPA 文档会告诉您的那样,并将参数传入

标签: jpa spring-data-jpa jpql


【解决方案1】:

JPQL 遵循 SQL 和 JDBC 的日期文字语法:

Date - {d 'yyyy-mm-dd'} - for example: {d '2010-12-31'}
Time - {t 'hh:mm:ss'} - for example: {t '23:59:59'}
Timestamp - {ts 'yyyy-mm-dd hh:mm:ss'} - for example: {ts '2011-01-03 14:59:59'}

【讨论】:

    猜你喜欢
    • 2020-11-20
    • 2018-10-05
    • 1970-01-01
    • 2015-02-09
    • 2010-11-10
    • 2017-09-07
    • 2015-12-09
    • 2017-07-02
    • 1970-01-01
    相关资源
    最近更新 更多