2012-08-23 33 views
4

我試圖做類似下面的選擇查詢:NamedQuery用CONCAT返回錯誤

SELECT *, CONCAT(TNUSERDATE, ' - ', TNUSERTIME) AS datetime 
    FROM TODONOTE WHERE TNTDKEY='TD00019148' ORDER BY datetime DESC; 

那查詢工作;然而,當我試圖將其轉移到命名查詢:

@NamedQueries({ 
    @NamedQuery(name = "Todonote.findAll", query = "SELECT c FROM Todonote c"), 
    @NamedQuery(name = "Todonote.findByTaskNumber", query = "SELECT c, CONCAT(c.userDate, ' - ', c.userTime) AS datetime FROM Todonote c WHERE c.todoTask = :taskNumber ORDER BY datetime DESC") 
}) 

我得到一個錯誤

[EL Severe]: 2012-08-23 12:15:39.111--ServerSession(841933)--Local Exception Stack: 
Exception [EclipseLink-6168] (Eclipse Persistence Services - 2.3.0.v20110604-r9504): org.eclipse.persistence.exceptions.QueryException 
Exception Description: Query failed to prepare, unexpected error occurred: [java.lang.ClassCastException: org.eclipse.persistence.internal.jpa.parsing.ConcatNode cannot be cast to org.eclipse.persistence.internal.jpa.parsing.AliasableNode]. 
Internal Exception: java.lang.ClassCastException: org.eclipse.persistence.internal.jpa.parsing.ConcatNode cannot be cast to org.eclipse.persistence.internal.jpa.parsing.AliasableNode 
Query: JPAQuery(name="Todonote.findByTaskNumber") 

我不確定的問題是什麼,或者我會怎樣執行CONCAT聲明。我的目標是運行namedQuery,並且返回給我的ResultList已根據連接列中的值進行排序。

謝謝

+0

是別名'datetime'的問題嗎? ('datetime'通常是一個SQL關鍵字。) – EthanB

+0

@EthanB Nope,因爲第一個(原始sql)查詢有效。以防萬一我嘗試用「香蕉」取代它 - 同樣的錯誤。 =( –

+1

看起來像JPA提供程序的SQL解析器中的錯誤。 –

回答

4

有一個在JPA 1.0和JPA 2.0.In JPA 2.0包括 「[AS] result_variable」 中選擇的項目是從1.0缺少的差。所以你可以嘗試這樣;

SELECT c, CONCAT(c.userDate, ' - ', c.userTime) FROM Todonote c WHERE c.todoTask = :taskNumber ORDER BY CONCAT(c.userDate, ' - ', c.userTime) DESC