【问题标题】:Issue with using timestamp field in named query在命名查询中使用时间戳字段的问题
【发布时间】:2013-07-01 22:32:56
【问题描述】:

我正在处理 Eclipselink 命名查询,但在为时间戳设置可选参数时遇到问题。

如果字段是由用户输入的,我的要求是查询带有时间戳的数据。由于该字段是可选的,我正在检查“0000-00-00 00:00:00”或用户输入日期。查询 sn-p 如下。但是它不起作用。

DataConstants.java
==================
public static String DATE_CHECKING_FORMAT = "0000-00-00 00:00:00"

Named Query
===========
entityManager.createNamedQuery("Requests.SearchAllData")
.setParameter("fromTime", ((selectionCriteria.getFromRequestTime() == null)? DataConstants.DATE_CHECKING_FORMAT : selectionCriteria.getFromRequestTime()))
.setFirstResult(offset).setMaxResults(limit).getResultList();

@NamedQuery(name = "Requests.SearchAllData", 
   query = "select ws.requestTimeStamp from StudentBE ws where ((:fromTime = to_timestamp('0000-00-00 00:00:00','dd-mm-yyyy hh24:mi:ss')) or (ws.requestTimeStamp >= :fromTime))), 

在执行时,我收到此错误。

异常说明:解析查询语法错误 [Requests.SearchAllData: select ws.requestTimeStamp from StudentBE ws where ((:fromTime = to_timestamp('0000-00-00 00:00:00','dd-mm-yyyy hh24:mi:ss')) 或 (ws.requestTimeStamp >= :fromTime)),第 1 行,第 63 列:[=] 处的语法错误。 内部异常:MismatchedTokenException(82!=84)

请建议如何使用可选的时间戳字段。

谢谢!!!

【问题讨论】:

    标签: timestamp eclipselink named-query


    【解决方案1】:

    to_timestamp() 是一个数据库函数,但您使用 JPQL 进行查询。

    对于 JPQL 时间戳格式,请参阅,

    http://en.wikibooks.org/wiki/Java_Persistence/JPQL#Literals

    如果你真的想使用数据库函数,可以使用 FUNC 或 FUNCTION 运算符。

    您可能还想将常量声明为参数,然后在执行查询时将其设置为参数。

    【讨论】:

      猜你喜欢
      • 2012-04-20
      • 1970-01-01
      • 2011-07-20
      • 1970-01-01
      • 1970-01-01
      • 2017-12-27
      • 2015-02-06
      • 1970-01-01
      • 2021-06-14
      相关资源
      最近更新 更多