我生成这个EJB SQL语句时遇到异常。
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的含义是什么?任何想法我做错了什么?
答案 0 :(得分:3)
我认为首先要注意的是EJB-QL与SQL不同,即使它看起来很相似,因此它的行为并不总是与SQL查询的行为方式相同。
虽然在EJB-QL规范中指定了TRIM
,但ORDER BY
必须使用SELECT
语句返回的内容。在这种情况下,TRIM
函数的结果不是可以满足ORDER BY
子句的标识符。来自JPA Query Language Syntax section of the Java EE 5 Tutorial:
使用ORDER BY子句时,SELECT子句必须返回一组可订择的对象或值。您不能为SELECT子句未返回的值或对象排序值或对象。
您可以在Java EE 5 Tutorial的相关章节中找到有关Java持久性查询语言的更多信息。
答案 1 :(得分:1)
您的ORDER BY
子句无效,您无法对SELECT子句未返回的值或对象的值或对象进行排序(请参阅EJB 3.0 JPA规范的第4.9章ORDER BY子句)。 / p>
BTW,我在EJB 3.0规范的查询语言章节的ORDER BY
子句中找不到SQL函数和聚合函数的使用,所以我不知道是否支持它。