Porque o toplink faz isso?

Olá

estou utilizando o TopLink como framework de persistencia, seguindo o exemplo da JavaMagazine do mes passado…
eu consegui sem problema executar procedimentos de insert, update e delete, mas to penando com a select…

eu uso o Firebird, e em uma entidade eu declaro essa query

@NamedQuery( name = "Tipocliente.pesquisa", query = "select t.codtpcli, t.desctpcli from Tipocliente t where :colunn like :value")
até ai tudo bem, mas quando tento usa-la com

Query query = manager.createNamedQuery("Tipocliente.pesquisa" ); query.setParameter( "colunn", colunn ); query.setParameter( "value", value ); list = query.getResultList();
na hora que ele chama getResulList() da o seguinte erro…

Local Exception Stack: Exception [TOPLINK-4002] (Oracle TopLink Essentials - 2006.6 (Build 060608)): oracle.toplink.essentials.exceptions.DatabaseException Internal Exception: org.firebirdsql.jdbc.FBSQLException: GDS Exception. 335544569. Dynamic SQL Error SQL error code = -804 Data type unknownError Code: 335544569 Call:SELECT t0.CODTPCLI, t0.DESCTPCLI FROM TIPOCLIENTE t0, TIPOCLIENTE t1 WHERE (? LIKE ?) bind => [t0.DESCTPCLI, 't%'] Query:ReportQuery(com.pregospan.atd.model.Tipocliente) at oracle.toplink.essentials.exceptions.DatabaseException.sqlException(DatabaseException.java:303) ... Caused by: org.firebirdsql.jdbc.FBSQLException: GDS Exception. 335544569. Dynamic SQL Error SQL error code = -804 Data type unknown at org.firebirdsql.jdbc.AbstractPreparedStatement.<init>(AbstractPreparedStatement.java:91) ...

alguem sabe me dizer por que diabos ele troca toda a minha query e ainda me larga esse Data type unknown ???

Ele “troca” sua query porque a query que você escreve aí não é em SQL e sim uma linguagem de consulta própria da JPA, se você precisasse escrever SQL aí, não faria sentido usar JPA, não é mesmo?!!

Assim sendo, não sei se você vai poder setar essa coluna como parametro não, acho que não, tenta colocar ela fixa pra você ver se funciona:

@NamedQuery( name = "Tipocliente.pesquisa", query = "select t.codtpcli, t.desctpcli from Tipocliente t where desctpcli like :value")

Digo isso porque eu acho que ele vai colocar o nome da coluna entre aspas e o Firebird não vai entender isso…

Não sei se é exatamente isso, mas tenta aí…

valeu jair, sem colocar o :campo funciona, mas…
o meu problema continua, essa query deveria ser montada dinamicamente, pois é usada em uma tela generica de pesquisa,
onde quem decide por qual campo pesquisar é o usuario…
so que quando tentava criar a query em tempo de execução da esse erro

java.lang.IllegalArgumentException: An exception occured while creating a query in EntityManager at oracle.toplink.essentials.internal.ejb.cmp3.EntityManagerImpl.createQuery(EntityManagerImpl.java:180) ... Caused by: Exception [TOPLINK-8025] (Oracle TopLink Essentials - 2006.6 (Build 060608)): oracle.toplink.essentials.exceptions.EJBQLException Exception Description: Syntax error parsing the query [select t from Tipocliente where t.DESCTPCLI like :value], unexpected token [where]. at oracle.toplink.essentials.exceptions.EJBQLException.unexpectedToken(EJBQLException.java:347) ...

eu não entendo o porque?