在命名查询中使用timestamp字段的问题

时间:2013-07-04 03:41:41

标签: timestamp eclipselink named-query

我正在处理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:从StudentBE中选择ws.requestTimeStamp其中((:fromTime = to_timestamp('0000-00-00 00:00:00','dd-mm-yyyy) hh24:mi:ss'))或(ws.requestTimeStamp> =:fromTime)),第1行,第63列:[=]处的语法错误。 内部异常:MismatchedTokenException(82!= 84)

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

感谢!!!

1 个答案:

答案 0 :(得分:2)

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

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

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

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

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