Toplink异常,怎么了?

时间:2010-03-02 13:32:44

标签: java jpa ejb-3.0 toplink-essentials

我生成这个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的含义是什么?任何想法我做错了什么?

2 个答案:

答案 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函数和聚合函数的使用,所以我不知道是否支持它。