我正在将一个现有的应用程序从Weblogic server9迁移到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这个编译器应该与EJBQL2.1查询一起使用。将编译器更改为默认的JDBCEJBQLCompiler不会更改任何内容。
有人知道这里出了什么问题吗?
谢谢你的帮助!:-)
发布于 2010-08-09 16:42:56
EJBQL只知道WHERE子句中的字符串、整数和布尔文字。'F‘是一个字符串,查询需要一个小整数值,因为我猜,char映射到了一些整数值。
编辑:也许使用'F‘的文字ascii-code 70可以用于此查询。尽管如此,SQL CHAR数据类型不应用于映射到cmp字段的数据库列。也许可以把它改成varchar。
https://stackoverflow.com/questions/3437628
复制相似问题