JPA2 e PostgreSQL no Brasil

12 respostas
chun

Olá Senhoras e Senhores,

O meu problema é bem simples e ao mesmo tempo bem complicado. Trabalho com PostgreSQL e como todos sabem ele é bem chatinho com acentuação… ai que está o problema , quero fazer uma JPQL que localize o ‘João’ porem no banco está cadastrado ‘Joao’ , ou seja , quero ignorar a acentuação…

pois bem… como fazer isso usando JPQL , existe alguma forma de fazer o postgresql ignorar sozinho no select direto ? (no estilo do mysql)

Estou quase desistindo dele como BD , poiis fazer NATIVAMENTE tenho que ficar xunxando com funcoes que COM CERTEZA vai deixar a aplicação mais lenta…

Atenciosamente,

12 Respostas

R

Pode-se usar assim nas suas clausulas

public static String toCaseAndAccentInsensitive(String value) {
		return "TRANSLATE(UPPER("+value+"),'ÁÉÍÓÚÀÈÌÒÙÂÊÎÔÛÃÕÄËÏÖÜÇÑYÝ','AEIOUAEIOUAEIOUAOAEIOUCNYY')";
}

Quando voce for fazer seu select, basta voce usar esse método.

Um exemplo:

query.createQuery("SELECT c FROM Cliente c WHERE " + toCaseAndAccentInsensitive("c.nome") + " LIKE " + toCaseAndAccentInsensitive(NOME) +"");
R

Voce pode colocar esse metodo como static e chama-lo de outra classe, esse metodo alem de ignorar acentos, ignora tambem case sensitive, ou seja, maiusculas e minusculas.

Hebert_Coelho

Pq você não altera o parâmetro antes de enviá-lo?

Bastaria criar um método e utilizá-lo em todo lugar…

DaniloAndrade

será que não daria pra usar a função REGEXP do jpa

Hebert_Coelho

DaniloAndrade:
será que não daria pra usar a função REGEXP do jpa
Que função é essa do JPA? Nunca tinha ouvido falar não…

Hebert_Coelho

Hebert Coelho:
DaniloAndrade:
será que não daria pra usar a função REGEXP do jpa
Que função é essa do JPA? Nunca tinha ouvido falar não…
Uia, maneiro!

DaniloAndrade

eu nunca usei, mas acho que da pra montar uma solução elegante para o problema de acentuação usando essa função

DaniloAndrade

[quote=Hebert Coelho]

Hebert Coelho:
DaniloAndrade:
será que não daria pra usar a função REGEXP do jpa
Que função é essa do JPA? Nunca tinha ouvido falar não…
Uia, maneiro!

eh, talvez não seja uma boa ideia afinal :lol:

DaniloAndrade

parece que no eclipse link funfa tem que ver se é possivel no hibernate tambem usando ele como provider jpa

EclipseLink supported functions

Function	 Description	 Example

CAST	 casts the value to the database type (as of 2.4)	

CAST(e.salary NUMERIC(10,2))

EXTRACT	 extracts the date part from the date/time value (as of 2.4)	

EXTRACT(YEAR, e.startDate)

REGEXP	 evaluates if the string matches the regular expression (as of 2.4)	

e.lastName REGEXP ^Dr.*

http://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Basic_JPA_Development/Querying/JPQL

XOOM

Cara, minha opinião, converte a string antes de jogá-la no select…fazer essas doideras pro SGBD cuidar geralmente gera um alto processamento.
Exemplo bobo:

Em coisas simples pode não aparecer, mas depende do tamanho do negócio, vish…f@** geral.

chun

Detalhe,

Em jpa nao posso manipular a query assim.

Hebert_Coelho

chun:
Detalhe,

Em jpa nao posso manipular a query assim.

upper pode.

Mas de novo… prefiro ainda alterar a string e depois mandar pra query. [=

Criado 31 de janeiro de 2013
Ultima resposta 31 de jan. de 2013
Respostas 12
Participantes 5