Ola Amigos, estou com seguinte problema, tentando utlizar uma query que aparentemente é simples.
Pois tenho uma query onde horas ela pode passar codigo, nome e cep, ou buscar so por nome etc…
por esse motivo faço uma validacao ex.
:param = 0 or obj.codigo =:param
ja usei para string
:param is null or obj.nome =:param, porem nao funciona para o postgre nem para firebird.
agora abaixo vou detalhar o erro:
A Query
StringBuffer sql = new StringBuffer();
sql.append(" select cliente from Cliente cliente");
sql.append(" inner join cliente.listaEndereco endereco");
sql.append(" where :codigo = 0 or cliente.id =:codigo “);
sql.append(” and (:nome =’’ or cliente.nome like :nome)");
// sql.append(" and (:cep is null or endereco.cep =:cep) “);
Query query = em.createQuery(sql.toString());
if(dto.getCliente() != null && dto.getCliente().getId() != null){
query.setParameter(“codigo”,dto.getCliente().getId().intValue());
}else{
query.setParameter(“codigo”,new Integer(0));
}
if(dto.getCliente() != null && dto.getCliente().getNome() != null
&& !”".equals(dto.getCliente().getNome())){
query.setParameter(“nome”,"%" + dto.getCliente().getNome().toString() + “%”);
}else{
query.setParameter(“nome”,new String(""));
}
FireBird
select
cliente0_.id_cliente as id1_0_,
cliente0_.nome as nome0_,
cliente0_.id_tipo_cliente as id3_0_
from
CLIENTE cliente0_
inner join
CLIENTE_ENDERECO listaender1_
on cliente0_.id_cliente=listaender1_.id_cliente
where
?=0
or cliente0_.id_cliente=?
and (
?=’’
or cliente0_.nome like ?
)
ERRO
could not bind value ‘%t%’ to parameter: 3; Data truncation
Postgre
Não da erro porem ele traz o registro que contem na tabela e o mesmo nao possui ?%t%?
Alguem imagina o que pode ser?
Uso Jboss seam + EJB3
Att