Исключение Toplink, что не так? - PullRequest
2 голосов
/ 02 марта 2010

У меня возникла исключительная ситуация при создании этого оператора 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'

В чем смысл ИДЕНТ. Есть идеи, что я делаю не так?

Ответы [ 2 ]

3 голосов
/ 02 марта 2010

Я думаю, что первое, что нужно отметить, это то, что EJB-QL - это не то же самое, что SQL, даже если он выглядит похожим, поэтому он не всегда ведет себя так же, как можно ожидать, что SQL-запрос будет работать.

Хотя TRIM указано в спецификации EJB-QL, ORDER BY должно использовать что-то, возвращаемое оператором SELECT.В этом случае результат функции TRIM не является идентификатором, который может удовлетворять предложению ORDER BY.Из раздела Синтаксис языка запросов JPA Учебного руководства по Java EE 5 :

При использовании предложения ORDER BY предложение SELECT должно возвращать упорядоченный набор объектов или значений.Вы не можете упорядочивать значения или объекты для значений или объектов, не возвращаемых предложением SELECT.

Дополнительную информацию о языке запросов Java Persistance вы найдете в соответствующей главе Java EE 5Учебное пособие .

1 голос
/ 02 марта 2010

Ваше предложение ORDER BY недопустимо, вы не можете упорядочивать значения или объекты для значений или объектов, не возвращаемых предложением SELECT (см. Главу 4.9 Предложение ORDER BY спецификации JPJ EJB 3.0).

Кстати, я не нашел упоминаний об использовании функций SQL и агрегатных функций в предложении ORDER BY в главе «Язык запросов» спецификации EJB 3.0, поэтому я не знаю, поддерживается ли это.

...