我需要知道如何在Java Persistence中的@NamedQuery
中調用SQL
函數,如HOUR()
。
爲了簡化起見,在一個具有開始時間(TIMESTAMP
)列的表中,我需要獲取具有介於CURRENT_TIMESTAMP
和HOUR(CURRENT_TIMESTAMP)+1
之間的startime的行。我在Google上度過了一天,但仍然無法找到答案。如何在Java持久性的@NamedQuery中調用像「HOUR()」這樣的SQL函數
以下查詢在與JAVADB
一起嘗試時有效,但在@NamedQuery
中也是如此。
的Java DB實例:
select e.EMPLOYEEID, e.FIRSTNAME, r.STARTTIME, r.ENDTIME from reservation r, employee e
where e.EMPLOYEEID = r.EMPLOYEEID AND HOUR(r.STARTTIME) = HOUR(CURRENT_TIMESTAMP)
@NamedQuery:
@NamedQuery(name="reservation.getcurrent",query = "select e.EMPLOYEEID, e.FIRSTNAME,
r.STARTTIME, r.ENDTIME from reservation r, employee e where e.EMPLOYEEID = r.EMPLOYEEID
AND HOUR(r.STARTTIME) = HOUR(CURRENT_TIMESTAMP)")
錯誤:
[2014-04-22T17:03:00.946+0530] [glassfish 4.0] [SEVERE] [] [javax.enterprise.system.core] [tid: _ThreadID=38 _ThreadName=admin-listener(5)] [timeMillis: 1398166380946] [levelValue: 1000] [[
Exception while deploying the app [LyndaPortalReservation] : Exception [EclipseLink-28019] (Eclipse Persistence Services - 2.5.0.v20130507-3faac2b): org.eclipse.persistence.exceptions.EntityManagerSetupException
Exception Description: Deployment of PersistenceUnit [LyndaPortalReservationPU] failed. Close all factories for this PersistenceUnit.
Internal Exception: Exception [EclipseLink-0] (Eclipse Persistence Services - 2.5.0.v20130507-3faac2b): org.eclipse.persistence.exceptions.JPQLException
Exception Description: Syntax error parsing [select e.EMPLOYEEID, e.FIRSTNAME, r.STARTTIME, r.ENDTIME from reservation r, employee e where e.EMPLOYEEID = r.EMPLOYEEID AND HOUR(r.STARTTIME) = HOUR(CURRENT_TIMESTAMP)].
[126, 169] The right expression is not a valid expression.]]
,這顯然不是標準的JPQL(您不會在其中的任何位置找到'FUNC'),並且FUNCTION *是*標準JPQL。看起來你的JPA提供者還不支持這個標準 –