我正在将现有的应用程序从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文件中声明的Query编译器是
org.jboss.ejb.plugins.cmp.jdbc.EJBQLToSQL92Compiler
此编译器应与EJBQL 2.1查询一起使用。将编译器更改为默认的JDBCEJBQLCompiler不会改变任何内容。
有人知道这里有什么问题吗?
感谢您的帮助! : - )
答案 0 :(得分:1)
EJBQL只知道WHERE子句中的String,Integer和Boolean-Literals。 'F'是一个String,查询期望一个smallint值,因为我猜,char被映射到一些整数值。
编辑:也许使用'F'的文字ascii-code 70可以用于此查询。 然而: SQL CHAR数据类型不应用于映射到cmp字段的数据库列。 也许把它改成varchar。