【发布时间】:2015-05-20 18:44:54
【问题描述】:
我有两个数据库列,其中一个是 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]
【问题讨论】:
-
您可能必须将其设为本机查询,因为 HQL 没有(任何?)日期算术函数。您的目标是哪个 RDBMS?不幸的是,ANSI SQL 也没有真正包含任何用于此目的的标准函数,因此查询将是特定于供应商的。
-
@MickMnemonic 我正在使用 Oracle。是的,使用本机查询我可能能够实现这一点,但我真的想使用命名查询来实现它。