Hibernate Criteria

04/10/2010

0

Possuo uma tabela Produtos assim definida:

   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

Galvez

Responder

Posts

04/10/2010

Davi Costa

Vai depender de que tipo é seu campo código.
Se for String é só colocar:

c.add(Restrictions.like("codigo", "%1"));
Responder

04/10/2010

Galvez

Caro Davi

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???
Responder

05/10/2010

Davi Costa

De ante mão,
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
Responder

13/10/2010

Dyego Carmo

Resolvido ?

Responder

19/10/2010

Galvez

Caro Dyego

Ainda não resolvi da forma deseja, por exemplo utilizando ums função similiar ao substr do Oracle. Não existe isso no HIbernate?

Responder

22/10/2010

Dyego Carmo

Não , não existe , voce vai OU precisar fazer um QUERY NATIVA OU criar um substituto para funcao DIRETO no objeto...

NEste caso acho que vai precisar de uma query nativa mesmo :(
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar