2

生成此 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 是什么意思。任何想法我做错了什么?

4

2 回答 2

3

我认为首先要注意的是 EJB-QL 与 SQL 不同,尽管它看起来很相似,因此它的行为方式并不总是与人们期望 SQL 查询的行为方式相同。

尽管TRIM在 EJB-QL 规范中指定,但ORDER BY必须使用SELECT语句返回的内容。在这种情况下,TRIM函数的结果不是可以满足ORDER BY子句的标识符。从Java EE 5 教程的 JPA 查询语言语法部分

使用 ORDER BY 子句时,SELECT 子句必须返回一组可排序的对象或值。您不能为 SELECT 子句未返回的值或对象对值或对象进行排序。

您将在Java EE 5 教程的相关章节中找到有关 Java 持久性查询语言的更多信息。

于 2010-03-02T13:56:28.323 回答
1

您的ORDER BY子句无效,您不能对 SELECT 子句未返回的值或对象的值或对象进行排序(请参阅 EJB 3.0 JPA 规范的第 4.9 章 ORDER BY 子句)。

顺便说一句,我在 EJB 3.0 规范的查询语言一章的子句中找不到任何提及使用 SQL 函数和聚合函数的ORDER BY内容,所以我不知道这是否受支持。

于 2010-03-02T18:49:48.670 回答