如何在Hibernate中为时间戳列添加分钟?

时间:2015-05-20 18:44:54

标签: java hibernate hql

我有两个数据库列,其中一个是Timestamp类型,另一个是Number持有#分钟。我有一个要求,我需要添加两列,即添加分钟到时间戳值,并将其与一个也是Timestamp的参数进行比较。以下是当前失败的NamedQuery

任何指针都会非常感激。我想使用Named Query而不是Native来实现此目的。

@NamedQuery(name = "Company.findAllProducts", query = "SELECT p FROM Product p JOIN FETCH p.productDetail pd WHERE (pd.createTimestamp + pd.minutesToActive) > :incomingTimestamp")

异常堆栈跟踪:

Parameter value [2015-05-20T14:52:08.764Z] did not match expected type [java.lang.Integer (n/a)]
java.lang.IllegalArgumentException: Parameter value [2015-05-20T14:52:08.764Z] did not match expected type [java.lang.Integer (n/a)]
        at org.hibernate.ejb.AbstractQueryImpl.validateBinding(AbstractQueryImpl.java:382) ~[hibernate-entitymanager-4.2.18.Final-redhat-2.jar!/:4.2.18.Final-redhat-2]
        at org.hibernate.ejb.AbstractQueryImpl.registerParameterBinding(AbstractQueryImpl.java:356) ~[hibernate-entitymanager-4.2.18.Final-redhat-2.jar!/:4.2.18.Final-redhat-2]
        at org.hibernate.ejb.AbstractQueryImpl.registerParameterBinding(AbstractQueryImpl.java:347) ~[hibernate-entitymanager-4.2.18.Final-redhat-2.jar!/:4.2.18.Final-redhat-2]
        at org.hibernate.ejb.QueryImpl.setParameter(QueryImpl.java:373) ~[hibernate-entitymanager-4.2.18.Final-redhat-2.jar!/:4.2.18.Final-redhat-2]
        at org.hibernate.ejb.QueryImpl.setParameter(QueryImpl.java:74) ~[hibernate-entitymanager-4.2.18.Final-redhat-2.jar!/:4.2.18.Final-redhat-2]

1 个答案:

答案 0 :(得分:0)

看起来NamedQuery无法使用Timestamp添加Integer值。

请检查您是否可以更改' Number' (分钟偏移字段),也是Timestamp字段。否则,您可以在查询之外进行添加。

请您提供更多详情,例如' 2015-05-20T14:52:08.764Z'这个值来自pd.createTimestamp?另外,您是否尝试直接在数据库中运行此SQL,是否有效?