| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 16/12/2008 16:17:58
|
marcelo.bellissimo
Virtual Machine Man
Membro desde: 17/10/2006 14:17:21
Mensagens: 617
Offline
|
Galera, mais uma dúvida pra voces...
Seguinte... para fazer buscas no banco usando Hibernate, crio um objeto Criteria e nele vou adicionando restrições baseados nos valores existentes no Bean que eu estou pesquisando... exemplo:
Como deu pra perceber ai, estou fazendo manualmente a inserção de cada Restriction caso o atributo esteja preenchido (meu método Util.isEmtpy verifica se o atributo está preenchido)... óbviamente isso fica inviável para Bean's que tenham muitos atributos, seria um trabalho braçal absurdo pra fazer isso...
Minhas alternativas:
1 - Usar Reflection pra pegar atributo por atributo, verificar seu tipo, nome, e adicionar o Restriction na Criteria;
2 - Rezar pro Hibernate já fazer algo parecido com isso !!
Então, alguém sabe se o Hibernate tem essa funcionalidade ?
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 16/12/2008 16:28:29
|
nextuser
JavaEvangelist
![[Avatar]](/images/avatar/fe10b3c08a1273145b1df65fc4ba484b.png)
Membro desde: 15/12/2008 11:21:08
Mensagens: 400
Localização: São Paulo, Brazil
Offline
|
|
Hudson Afonso
Consultor
http://penseinteligente.com.br/
Pense Inteligente:
A Inteligente é uma consultoria em tecnologia da informação, que atua na comercialização e implementação de produtos de software corporativos. Com foco no cliente, compreendemos a necessidade de nossos clientes e adicionamos valor para a condução de seus negócios.
Focus:
SPED, Saneamento de Cadastro, Saneamento de Dados, Cadastro de Clientes e Fornecedores, Cadastro da Receita Federal, CNPJ, CPF, Cadastro, Correção de Cadastro para o SPED, Exigências legais para o SPED, Cadastro CNPJ, Certidão CNPJ, Comprovante CPF, Consulta CPF, Consulta Serasa, Consulta SPC, Nota Fiscal Eletrônica, SPED Contábil, SPED Fiscal |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 16/12/2008 16:29:44
|
von.juliano
GUJ Master
![[Avatar]](/images/avatar/efb61dd984183066a8815190a28bd956.jpg)
Membro desde: 15/01/2007 13:31:32
Mensagens: 1266
Offline
|
O Hibernate faz sim, chama-se query by example
Blz? Flw!
|
É difícil manter-se religioso quando algumas pessoas simplesmente não são carbonizadas por raios!
Desenvolvendo software de forma simples! - http://vonjuliano.wordpress.com/ |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/12/2008 08:20:38
|
marcelo.bellissimo
Virtual Machine Man
Membro desde: 17/10/2006 14:17:21
Mensagens: 617
Offline
|
Caramba, por isso que eu adoro esse Fórum...
O único problema desse Example é que ele ignora os relacionamentos, mas já me poupou um trabalho imenso !
Valeu, von.juliano !
This message was edited 1 time. Last update was at 18/12/2008 08:20:59
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/12/2008 08:42:24
|
von.juliano
GUJ Master
![[Avatar]](/images/avatar/efb61dd984183066a8815190a28bd956.jpg)
Membro desde: 15/01/2007 13:31:32
Mensagens: 1266
Offline
|
Como assim, ignora os relacionamentos?
|
É difícil manter-se religioso quando algumas pessoas simplesmente não são carbonizadas por raios!
Desenvolvendo software de forma simples! - http://vonjuliano.wordpress.com/ |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/12/2008 09:05:02
|
marcelo.bellissimo
Virtual Machine Man
Membro desde: 17/10/2006 14:17:21
Mensagens: 617
Offline
|
"Version properties, identifiers and associations are ignored. By default, null valued properties are excluded."
Realmente ele faz isso, por exemplo, uma classe minha chamada Bairro e que possui os atributos descritos abaixo:
Note que esses aqui são referências/relacionamentos com outras classes:
O Example não leva em conta os valores desses atributos, e se você verificar no objeto Criteria após a adiçlão do Example, realmente não vai constar nada relativo á esses atributos... fiz um teste, e no código HQL gerado ele faz um where bem esquisito:
Mas isso não é problema, o que eu fiz foi o seguinte, uma rotina que adiciona no Criteria o Example, e os outros objetos que são relacionamento com outra tabela eu adiciono manualmente, assim:
E é isso aí... outra coisa que deu pra perceber no código ai em cima, é que o Example também ignora os identificadores da Classe... e isso é meio lógico, se voce passar o ID do objeto lógicamente só vai existir um único objeto, logo todos esses critérios de busca deixam de fazer sentido...
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/12/2008 09:29:45
|
von.juliano
GUJ Master
![[Avatar]](/images/avatar/efb61dd984183066a8815190a28bd956.jpg)
Membro desde: 15/01/2007 13:31:32
Mensagens: 1266
Offline
|
Ah sim, os relacionamentos são ignorados utilizando Example, mas você pode aninhar mais de um Example, obtendo um resultado que meio que considera os relacionamentos. Vou colocar um exemplo:
É só um exemplo, talvez não seja tão útil nesse caso, mas ao menos não será necessário fazer as verificações!
Fica a dica. Flw!
|
É difícil manter-se religioso quando algumas pessoas simplesmente não são carbonizadas por raios!
Desenvolvendo software de forma simples! - http://vonjuliano.wordpress.com/ |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/12/2008 09:58:49
|
marcelo.bellissimo
Virtual Machine Man
Membro desde: 17/10/2006 14:17:21
Mensagens: 617
Offline
|
Ah, tá, eu entendi esse exemplo... vou fazer uns testes aqui pra ver como fica o SQL, pois o meu medo é ele gerar um SQL muito grande, com um Select muito custoso por causa de tantos critérios (por isso eu adiciono apenas o Objeto no Criteria, pra pesquisar pelo ID dele, é mais rápido) ... mas já estou vendo que mais pra frente provavelmente encontrarei casos que vou ter que usar algo desse tipo mesmo, valeu a dica !
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 16/01/2009 19:51:28
|
GraveDigger
JavaEvangelist
![[Avatar]](/images/avatar/3332880692313818482a5a0286608ab6.jpg)
Membro desde: 07/07/2005 13:47:12
Mensagens: 354
Localização: Aracajú
Offline
|
von.juliano wrote:Ah sim, os relacionamentos são ignorados utilizando Example, mas você pode aninhar mais de um Example, obtendo um resultado que meio que considera os relacionamentos. Vou colocar um exemplo:
É só um exemplo, talvez não seja tão útil nesse caso, mas ao menos não será necessário fazer as verificações!
Fica a dica. Flw!
Cara, estou tentando fazer isso, sem sucesso.
Tem certeza que é assim mesmo ?
obrigado
EDIT: Esqueçe, deu certo aqui, eu que tava fazendo errado(com a tabela zerada queria trazer registro )
Abraço e obrigado d novo
This message was edited 1 time. Last update was at 16/01/2009 20:01:34
|
SCWCD
SCJP
Pedro Henrique Lobato Sena
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 19/01/2009 07:35:01
|
marcelo.bellissimo
Virtual Machine Man
Membro desde: 17/10/2006 14:17:21
Mensagens: 617
Offline
|
Hahaha, acontece...
Eu também, no começo, me matei pra fazer um "select" de uma classe com PK composta, fiquei todo feliz quando acertei o mapeamento, ai fui fazer um teste, um "getAll()" da vida... a lista vinha vazia...
Ai depois de muito tempo, verificando mapeamento, se estava tudo certinho, eu pensei... "po... tem dados nessa tabela ?"
select * from xyz;
09:00:00 [SELECT - 0 row(s), 0.019 secs] Empty result set fetched
"... hmmmmmm ... falha nossa... "
Mas qualquer duvida, tamos ai...
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/02/2011 15:52:50
|
feltraco
JavaEvangelist
![[Avatar]](/images/avatar/0ed83ca5894f30aed6da389d630d89a3.png)
Membro desde: 17/08/2007 14:22:17
Mensagens: 372
Localização: Foz do Iguaçu
Offline
|
Ressuscitando o TOPICO.
Alguem saberia me dizer se tem algum forma de eu fazer o Example adicionar os relacionamentos na clausula WHERE ?
Tenho um DAO Generico, e nao achei uma forma elegante de faze-lo.
Grato desde jah.
|
Juliano Feltraco
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 01/02/2011 16:00:57
|
GraveDigger
JavaEvangelist
![[Avatar]](/images/avatar/3332880692313818482a5a0286608ab6.jpg)
Membro desde: 07/07/2005 13:47:12
Mensagens: 354
Localização: Aracajú
Offline
|
Opa,
Então cara, eu consegui fazer aqui, funciona da seguinte maneira, eu informo o nome da entidade correspondente como parâmetro(ele não usa todos os possíveis por default, tenho que especificar cada um) e com base nisso eu faço:
De forma que method simboliza o getter adequado pra entidade que foi passada como parâmetro.
Tenho outras coisas aqui, mas o segredo é isso daí, qualquer dúvida avise,
Att
|
SCWCD
SCJP
Pedro Henrique Lobato Sena
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/02/2011 10:18:48
|
feltraco
JavaEvangelist
![[Avatar]](/images/avatar/0ed83ca5894f30aed6da389d630d89a3.png)
Membro desde: 17/08/2007 14:22:17
Mensagens: 372
Localização: Foz do Iguaçu
Offline
|
GraveDigger wrote:Opa,
Então cara, eu consegui fazer aqui, funciona da seguinte maneira, eu informo o nome da entidade correspondente como parâmetro(ele não usa todos os possíveis por default, tenho que especificar cada um) e com base nisso eu faço:
De forma que method simboliza o getter adequado pra entidade que foi passada como parâmetro.
Tenho outras coisas aqui, mas o segredo é isso daí, qualquer dúvida avise,
Att
Cara valeu pela ajuda, ajudou mt mesmo resolvi o problema e dei uma melhorada na sua solucao =)
Vou deixar aqui oque fiz, pode ser que ajude alguem tambem.
Onde: AbstractPersistentObject eh o meu objeto PAI para todo objeto que vai ser persistido e DTO eh o objeto que esta sendo persistido.
Fiz dentro de um while para pegar relacionamentos que estejam nas classes PAI.
Eh isso ai...
Valeu
|
Juliano Feltraco
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/02/2011 11:42:40
|
Priuli
JavaEvangelist
![[Avatar]](/images/avatar/7047653faab87234b4f0d8e9d669fa7c.jpg)
Membro desde: 27/12/2007 19:31:45
Mensagens: 373
Offline
|
Aê pessoal, fiz um projeto de filtro justamente para não usar o Example a um tempo atraz, pois o mesmo ñ fazia tudo o que eu queria, ñ pega os ids dos relacionametos, então resolvi criar um projeto só para isso eu uso a 1 ano e alguns meses em uma aplicação jsf que tem bastantes acessos diarios e alguns amigos tb usam, segue ai caso interesse.
Ele tem mais coisas interessantes.. segue link
Forum
http://www.guj.com.br/java/221618-filter-dinamico-para-hibernate
Download
È Free LGPL, tem testes de unidade e svn, e maven -> http://sourceforge.net/projects/priuli-filter/
Reposi.. MAVEN
https://oss.sonatype.org/content/groups/staging/net/priuli/
+ Informações
http://felipepriuli.wordpress.com/2010/10/12/priuli-filter/
This message was edited 4 times. Last update was at 02/02/2011 11:49:29
|
Projetos:
OpenSutils-Br4J - http://code.google.com/p/opensutils-br4j/
Priuli-Filter - http://sourceforge.net/projects/priuli-filter/
Certificação:
OCPJ 6 90% |
|
|
 |
|
|