1

我正在将现有应用程序从 Weblogic server 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 不会更改任何内容。

有人知道这里有什么问题吗?

谢谢你的帮助!:-)

4

1 回答 1

1

EJBQL 只知道 WHERE 子句中的 String、Integer 和 Boolean-Literals。'F' 是一个字符串,并且查询需要一个 smallint 值,因为我猜,那个 char 被映射到一些整数值。

编辑:也许使用 'F' 的文字 ascii 代码 70 可用于此查询。然而:SQL CHAR 数据类型不应用于映射到 cmp 字段的数据库列。也许将其更改为 varchar。

于 2010-08-09T08:42:55.560 回答