JPA2 e PostgreSQL no Brasil

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,

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) +"");

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.

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

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

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

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

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

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

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

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

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

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.

Detalhe,

Em jpa nao posso manipular a query assim.

[quote=chun]Detalhe,

Em jpa nao posso manipular a query assim.[/quote]upper pode.

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