JPQL x DB2

2 respostas
C

Pessoal,

Estou com seguinte problema:

Estou desenvolvendo sistema com JSF + Websphere versão 7, OpenJPA 2.0 e banco de dados DB2 versão 9.

Meu problema é com acentuação em pesquisas utilizando like. Estou persistindo os dados no banco de dados da forma com que usuário digita e, não posso persistir tudo em caixa alta.

Exemplo
Nome do cliente: Órgão máximo de autoridade

Quando efetuo pesquisa por nome do cliente utilizando like, só encontro o registro se usuário digitar exatamente como foi persistido, sei que banco de dados DB2 é case sensitive.

Encontrei uma solução para query nativa, exemplo:

Select * from admin.TB_CLIENTE where upper(nom_cliente, ‘pt_BR’) like ‘%órgão%’, funciona perfeitamente.
Select * from admin.TB_CLIENTE where lower(nom_cliente, ‘pt_BR’) like ‘%órgão%’, funciona perfeitamente.

Porém, estou utilizando JPQL, gostaria de saber se há possíbilidade dar @Override na function upper, lower no JPQL ou passar parametro LOCALE na function upper, lower?

2 Respostas

jMarcel

No seu modelo, existe essa necessidade de os dados serem persistidos com a grafia exata (acentuação etc) ?

Se não houver, uma idéia seria você converter tudo para upper (ou lower) case no BD e tb na captura do que o cliente digitou.

Ou seja, tudo no meu BD será [color=blue]upperCase[/color]. então, quando o cliente digitar (em lower ou upperCase), eu converto para [color=blue]upperCase[/color], que é como está no meu BD case sensitive.

Você vai precisar:

  1. dar um update no BD e deixar tudo upper (ou lower)Case
UPDATE TABLE_NAME SET COL1=UPPER(COL1)
  1. converter tudo para upper(lower)Case quando da captura do texto:
jTextField.getText().toUpperCase();
C

Obrigado pela ajuda, mas, infelizmente o cliente exige que os dados sejam persistidos da maneira que ele digitou.

Eu precisava saber como passar parametro LOCALE na function upper/lower em JPQL

Criado 16 de maio de 2011
Ultima resposta 16 de mai. de 2011
Respostas 2
Participantes 2