2010-03-02 57 views
2

我生成這個EJB SQL語句時發生異常。Toplink異常,怎麼了?

Exception Description: Syntax error parsing the query [SELECT h FROM Busmodul h WHERE LOWER(h.modulNummer) LIKE :modulnummer AND h.einbauort.id = :einbauort_fk AND h.plattform.id = :plattform_fk ORDER BY TRIM(TRAILING '-' FROM CONCAT('0', h.modulNummer))], line 1, column 150: syntax error at [TRIM]. 
Internal Exception: line 1:150: expecting IDENT, found 'TRIM' 

什麼IDENT的意義。任何想法我做錯了什麼?

回答

1

您的ORDER BY子句無效,您不能在值或對象上對未由SELECT子句返回的值或對象進行排序(請參閱第4.9章ORDER BY子句中的EJB 3.0 JPA規範)。

順便說一句,我沒有發現在EJB 3.0規範的查詢語言章節的ORDER BY子句中使用SQL函數和聚合函數的任何提及,所以我不知道這是否被支持。

+0

謝謝你。它只是不被支持。 – 2010-03-03 08:32:22

3

我認爲首先要注意的是,儘管EJB-QL看起來很相似,但它與SQL並不相同,所以它並不總是像預期SQL查詢的行爲一樣。

雖然TRIM在EJB-QL規範中指定,ORDER BY必須使用由SELECT語句返回的東西。在這種情況下,TRIM函數的結果不是可以滿足ORDER BY子句的標識符。從JPA Query Language Syntax section of the Java EE 5 Tutorial

使用ORDER BY子句時,SELECT子句必須返回一組可訂購的對象或值。您無法爲未由SELECT子句返回的值或對象排序值或對象。

有關Java持久性查詢語言的更多信息,請參閱Java EE 5 Tutorial的相關章節。

+0

-1:TRIM在EJB-QL定義(參見JPA規範或Java EE 5教程http://java.sun.com/javaee/5/docs/tutorial/doc/bnbuf.html#bnbvo) – 2010-03-02 17:58:50

+0

你是對的,我的不好。 – Ophidian 2010-03-02 18:02:30

+0

刪除downvote – 2010-03-02 19:20:31