Domanda

sto migrando un'applicazione esistente dal server Weblogic 9 a JBoss 5.

Il mio problema è con una query che ha una condizione di carattere nella clausola WHERE, come questo:

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

... che credo è stato lavorare con WLS ora porta ad una distribuzione interrotta con JBoss, a causa del seguente motivo:

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> ...

Il file jbosscmp-jdbc.xml ejb-jar.xml e dichiarare il tipo e l'attributo. Nei file di Java, il getter e setter per questo attributo sia utilizzare il tipo java.lang.Character. La colonna del database Oracle è di tipo CHAR (1).

Il compilatore query dichiarata nel file jbosscmp-jdbc.xml è

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

Questo compilatore è quello che dovrebbe essere utilizzato con EJBQL 2.1 query. Cambiare il compilatore di default JDBCEJBQLCompiler non cambia nulla.

Chiunque sa che cosa c'è che non va qui?

Grazie per il vostro aiuto! : -)

È stato utile?

Soluzione

EJBQL conosce solo String, Integer e booleani-letterali in WHERE clausola. 'F' è una stringa e la query si aspetta un smallint valore, perché immagino, che char è mappato alcuni valori interi.

EDIT: Forse usando il codice ASCII letterale 70 della 'F' può essere utilizzato per questa query. Tuttavia: Il tipo di dati SQL CHAR non deve essere utilizzato per le colonne del database che vengono mappati a cmp campi. Forse modificarlo a VARCHAR.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top