Hibernate Criteria
04/10/2010
0
codigo Nome codigoDetalhado Status
100 xxxxxxxxxxxxxxxxx 100302202 A
101 zzzzzzzzzzzzzzzzz 100302221 I
102 vvvvvvvvvvvvvvvvv 200302223 A
103 mmmmmmmmmmm 200302244 A
104 qqqqqqqqqqqqqqqqq 200402202 I
105 rrrrrrrrrrrrrrrrr 300502202 A
Tenho utilizado o codigo Hibernate abaixo para filtrar meus dados
public List<Produtos> listarProd(){
Criteria c = session.createCriteria(Produtos.class);
c.add(Restrictions.eq("Status", "A"));
c.addOrder(Order.asc("Nome"));
return c.list();
Até o momento isso tem me atendido prontamente, porém, agora necessito
recperar os produtos, cujo <codigoDetalhado> se iniciem por 1,2, ou 3,
conforme escolha do usuário (primeira posição a esquerda do campo).
Alguem poderia me dar uma luz de como definir isso no Hibernate??? Alias
esse <codigoDetalhado> é numérico de 9 posições.
Galvez
Posts
04/10/2010
Davi Costa
Se for String é só colocar:
c.add(Restrictions.like("codigo", "%1"));
04/10/2010
Galvez
Esse é o problema. Meu campo é numérico de 9 posições (base oracle). No PL/SQL do Oracle e no Adobe Flex até consigo manipular esse campo, pegando parte dele com SUBSTR ou comando semelhante. O que não sei é fazer isso no HIbernate.
Por ex:
O usuario informa o nr 2 num determinado campo auxiliar _codigo. Ai preciso comparar com a primeira posicao desse campo codigodetalhado.
c.add(Restrictions.eq("codigodetalhado", _codigo));
mas como informar a ele que quero comparar a primeira posição a esquerda do codigodetalhado com _codigo???
05/10/2010
Davi Costa
tem como vc usar native query com hibernate, com pouquíssima pesquisa vc acha alguma solução na internet.
Uma preocupação a menos,
porém isso tem um peso, alguns bancos tem funções próprias fantásticas como oracle, postgresql...
mas deixa tua aplicação acoplada ao seu banco... que é justamente o que o hibernate não quer.
Meu concelho é tentar usar o mínimo possível as funções exclusivas do teu banco, infelizmente o SQL ANSI nativão
mesmo nem sempre vai atender a todos os casos, não posso afirmar se vai atender ao seu, mas pelo menos vc tem que estar ciente que caso haja uma mudança de banco, vai ter que ser pensado uma refatoração em cima desse caso de uso.
Att Davi
19/10/2010
Galvez
Ainda não resolvi da forma deseja, por exemplo utilizando ums função similiar ao substr do Oracle. Não existe isso no HIbernate?
22/10/2010
Dyego Carmo
NEste caso acho que vai precisar de uma query nativa mesmo :(
Clique aqui para fazer login e interagir na Comunidade :)