Derby SQL时间戳算法和JDBC转义语法

Derby SQL时间戳算法和JDBC转义语法,sql,jdbc,derby,toplink,Sql,Jdbc,Derby,Toplink,我的表中有两列,Created(TIMESTAMP)和lifetime(BIGINT)。寿命以秒表示。我想将lifetime列添加到timestamp列,并将该结果与另一个日期进行比较 我在“fn关键字的JDBC转义语法”一节中引用并找到了对TIMESTAMPADD的支持: {fn functionCall} TIMESTAMPADD(interval、integerExpression、timestampExpression) 好吧,我试着: SELECT i.messageId FROM S

我的表中有两列,Created(TIMESTAMP)和lifetime(BIGINT)。寿命以秒表示。我想将lifetime列添加到timestamp列,并将该结果与另一个日期进行比较

我在“fn关键字的JDBC转义语法”一节中引用并找到了对TIMESTAMPADD的支持:

{fn functionCall} TIMESTAMPADD(interval、integerExpression、timestampExpression)

好吧,我试着:

SELECT i.messageId FROM ServerMessageEntity i
WHERE {fn TIMESTAMPADD(SQL_TSI_SECOND, i.lifetime, i.created)} > :now
*:现在是我传入的参数:

query.setParameter
不幸的是,我得到了以下例外:

异常描述:分析查询时出现语法错误[SELECT] i、 来自ServerMessageEntity i的messageId,其中{fn TIMESTAMPADD(SQL\u TSI\u SECOND,i.life,i.created)}>:now], 意外字符[{]

解决方案似乎是将秒数添加到创建的时间戳中,并将结果作为另一个时间戳。如果您有任何帮助或语法,我们将不胜感激。谢谢


其他信息:我在ORM和Derby 10.10.2.0中使用Oracle TopLink 12c(12.1.2)

事实证明,我的问题是使用“@NamedQuery”来存储查询。我使用“createNativeQuery”方法进行了实验,并能够得到我想要的结果

String sql = "SELECT MESSAGEID FROM \"TABLE\".SERVERMESSAGES WHERE {fn TIMESTAMPADD(SQL_TSI_SECOND, LIFETIME, CREATED)} < ?"
Query query = entityManager.createNativeQuery(sql);
String sql=“从\“表\”中选择MESSAGEID。SERVERMESSAGES其中{fn TIMESTAMPADD(sql\u TSI\u SECOND,life,CREATED)}<?”
Query Query=entityManager.createNativeQuery(sql);