tenho uma classe de Usuarios e uma de Grupos com relacionamento ManyToMany.
quando mando buscar Usuarios de acordo com o ID do Grupo utilizando de Restrictions.or ele busca os dados corretamente, mas quando busco por Restrictions.and ele não encontra nada. mas a busca com or (e verificação manual no banco de dados) me provam que existiriam essa coincidência. Alguém já teve um problema parecido?
então, se eu buscar por OR, a busca me trará os usuários que estão no grpEconomico E os usuarios que estão no grpRegioes, mas eu quero os usuarioes que estão nos dois grupos ao mesmo tempo.
"grupo.cadgrId" = grpEconomico
//E ao mesmo tempo
"grupo.cadgrId" = grpRegioes
Certo?
O que acontece é que provavelmente você tenha apenas uma coluna que representa o valor cadgrId de um grupo, correto? Logo, você nunca terá, ao mesmo tempo uma linha em que o valor de cadgrId seja igual a grpEconomico e grpRegioes.
O or funciona pois ele não exige que o valor seja igual aos dois parâmetros, ao mesmo tempo. Ele é inclusivo. Ou cadgrId = grpEconomico, ou cadgrId = grpRegioes ou ambos. Só no caso de não ser igual a nenhum dos dois que nenhum registro virá.
Para que você consiga trazer resultados em que o valor de uma coluna deve atender a mais de um parâmetro, ao mesmo tempo, será necessário utilizar um OUTER LEFT JOIN…
Só que eu nunca fiz isso no hibernate…
[quote=drsmachado]Pelo que entendi, você quer os registros em que
"grupo.cadgrId" = grpEconomico
//E ao mesmo tempo
"grupo.cadgrId" = grpRegioes
Certo?
O que acontece é que provavelmente você tenha apenas uma coluna que representa o valor cadgrId de um grupo, correto? Logo, você nunca terá, ao mesmo tempo uma linha em que o valor de cadgrId seja igual a grpEconomico e grpRegioes.
O or funciona pois ele não exige que o valor seja igual aos dois parâmetros, ao mesmo tempo. Ele é inclusivo. Ou cadgrId = grpEconomico, ou cadgrId = grpRegioes ou ambos. Só no caso de não ser igual a nenhum dos dois que nenhum registro virá.
Para que você consiga trazer resultados em que o valor de uma coluna deve atender a mais de um parâmetro, ao mesmo tempo, será necessário utilizar um OUTER LEFT JOIN…
Só que eu nunca fiz isso no hibernate…[/quote]
entendi…
irei pesquisar sobre como fazer isso no Hibernate. com o Termo em SQL deve facilitar. retornarei amanhã com o resultado disso. Obigado!
[quote=Ataxexe]Ops, entendi direito agora. Você vai ter que fazer a consulta mais ou menos assim
"from CadastroUsuarios as cadastro where :grupo1 member of cadastro.grupo and :grupo2 member of cadastro.grupo"
Não manjo muito de hql, mas acho que é mais ou menos assim.[/quote]
irei procurar uma forma de fazer isso no Hibernate, volto amanhã com o resultado disso. Obrigado!
Bom, depois de um tempo de pesquisa decidi por usar o OR e depois filtrar a lista que vem para alcançar o resultado desejado… essa pode não ser a melhor prática, mas infelizmente estou trabalhando em toque de urgência, e como tenho 0 experiência com HQL, prefiro evitar ao máximo utiliza-lo pelo menos por enquanto…
se alguém quiser ainda postar mais alguma coisa, eu agradeço de qualquer forma.
[quote=Ijimero]Bom, depois de um tempo de pesquisa decidi por usar o OR e depois filtrar a lista que vem para alcançar o resultado desejado… essa pode não ser a melhor prática, mas infelizmente estou trabalhando em toque de urgência, e como tenho 0 experiência com HQL, prefiro evitar ao máximo utiliza-lo pelo menos por enquanto…
se alguém quiser ainda postar mais alguma coisa, eu agradeço de qualquer forma.
valeu pessoal![/quote]
Eu faria a mesma coisa no seu lugar também…hehehe…tem horas que infelizmente não dispomos de tempo pra resolver o problema da melhor forma.
Só não deixe de dar uma olhada depois pra não deixar o sistema cheio de remendos.
[quote=Ataxexe][quote=Ijimero]Bom, depois de um tempo de pesquisa decidi por usar o OR e depois filtrar a lista que vem para alcançar o resultado desejado… essa pode não ser a melhor prática, mas infelizmente estou trabalhando em toque de urgência, e como tenho 0 experiência com HQL, prefiro evitar ao máximo utiliza-lo pelo menos por enquanto…
se alguém quiser ainda postar mais alguma coisa, eu agradeço de qualquer forma.
valeu pessoal![/quote]
Eu faria a mesma coisa no seu lugar também…hehehe…tem horas que infelizmente não dispomos de tempo pra resolver o problema da melhor forma.
Só não deixe de dar uma olhada depois pra não deixar o sistema cheio de remendos.[/quote]
sim, isso com certeza… terminando essa fase teremos mais tempo e eu procurarei a melhor solução… achando ela eu volto aqui e posto… =p
Depois de muito tempo, ainda no mesmo projeto me deparei com a mesma situação em uma relação muito mais complexa, e usar um filtro porco seria complicado demais… mas agora FINALMENTE encontrei a solução, e não foi via HQL…
a resposta é o uso de Subqueries, que fabrica Criterions que envolvem a criação de subconsultas. Para usar qualquer método da Subqueries precisamos de uma DetachedCriteria.
segue um link com uma BELA explicação:
mal posso acreditar que nunca mais vou ter que me preocupar com isso