Почему этот EJBQL-запрос не подтвержден JBoss 5? - PullRequest
1 голос
/ 09 августа 2010

Я переношу существующее приложение с сервера Weblogic 9 на JBoss 5.

Моя проблема связана с запросом, в котором есть условие символа в предложении WHERE, например:

SELECT DISTINCT OBJECT(myObject) 
FROM MyObject myObject 
WHERE myObject.myAttribute = 'F'

... который, я считаю, работал с WLS, теперь приводит к прерыванию развертывания с JBoss по следующей причине:

Caused by: org.jboss.ejb.plugins.cmp.ejbql.ParseException: Encountered "\'F\'" 
at line 1, column 99.
Was expecting one of:
    "ABS" ...
    "LENGTH" ...
    "LOCATE" ...
    "SQRT" ...
    "MOD" ...
    "(" ...
    "+" ...
    "-" ...
    <INTEGER_LITERAL> ...
    <FLOATING_POINT_LITERAL> ...
    <NUMERIC_VALUED_PARAMETER> ...
    <NUMERIC_VALUED_PATH> ...

Файлы ejb-jar.xml и jbosscmp-jdbc.xml объявляют тип и атрибут. В файлах Java методы getter и setter для этого атрибута используют тип java.lang.Character. Столбец базы данных Oracle имеет тип CHAR (1).

Компилятор запросов, объявленный в файле jbosscmp-jdbc.xml:

org.jboss.ejb.plugins.cmp.jdbc.EJBQLToSQL92Compiler

Этот компилятор должен использоваться с запросами EJBQL 2.1. Изменение компилятора на JDBCEJBQLCompiler по умолчанию ничего не меняет.

Кто-нибудь знает, что здесь не так?

Спасибо за вашу помощь! : -)

1 Ответ

1 голос
/ 09 августа 2010

EJBQL знает только String, Integer и Boolean-Literal в предложении WHERE.«F» - это строка, и запрос ожидает значение smallint, потому что я предполагаю, что char сопоставляется с некоторыми целочисленными значениями.

РЕДАКТИРОВАТЬ: Возможно, для этого запроса можно использовать буквенный ascii-код 70 из 'F'.Тем не менее: тип данных SQL CHAR не должен использоваться для столбцов базы данных, которые сопоставлены с полями cmp.Возможно, измените его на varchar.

...