我正在处理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)
请建议如何使用可选的时间戳字段。
感谢!!!
答案 0 :(得分:2)
to_timestamp()是一个数据库函数,但您正在使用JPQL进行查询。
对于JPQL时间戳格式,请参阅
http://en.wikibooks.org/wiki/Java_Persistence/JPQL#Literals
如果您真的想使用数据库功能,可以使用FUNC或FUNCTION运算符。
您可能还希望将常量声明为参数,然后在执行查询时将其设置为参数。