0

我正在研究 Eclipselink 命名查询,并且在为时间戳设置可选参数时遇到问题。

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

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)

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

谢谢!!!

4

1 回答 1

2

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

有关 JPQL 时间戳格式,请参阅,

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

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

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

于 2013-07-04T13:52:57.927 回答