2010-03-02 63 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