Olá,
Alguém já fez alguma query no hibernate, sendo recursiva??
eu tenho um java bean Empresa e esta pode ter diversas filiais e estas
filiais também tem outras filiais, e assim vai.
Alguém pode me ajudar???
Obrigado!!!
Abraço
Olá,
Alguém já fez alguma query no hibernate, sendo recursiva??
eu tenho um java bean Empresa e esta pode ter diversas filiais e estas
filiais também tem outras filiais, e assim vai.
Alguém pode me ajudar???
Obrigado!!!
Abraço
Hmm, o que exatamente voce quer fazer? Pesquisar “me de todas empresas parentes da empresa x” ou “from Empresa e where e.filhas[0].filhas[0].filhas[0].name = ‘nome da empresa’”?
E ai louds, blz??
Intão, O mapeamento tá certtinho, ele busca as empresas, mostra suas empresas “Pai”, tudo blz…
Mas surgiu uma funcionalidade aki q tenho q fazer…
funciona assim. eu tenho as Empresas, estas empresas tem usuários.
Então o usuário loga no sistema.
Vamos supor que seja um usuário de uma empresa Matriz.
Então na hora de buscar, ele busca a Matriz e todas as suas filiais.
e dentro de suas filiais, pega suas outras “filiais” e assim por diante.
Daí surge outro problema…
vamos supor que o usuário q se conectou no sistema seja de uma filial.
Então, na hora dele buscar as empresas, ele deve mostrar apenas
as suas proóprias filiais, e assim vai…
Não sei se fui claro. À medida que vai “descendo o nivel de hirearquia”
ele não enxerga o que está acima, ou seja, quando o usuário está dentro
da filial, ele consegue enxergar apenas as suas próprias filiais e se o usuário está na Matriz, ele consegue exergar tudo abaixo dele.
Eu to conseguindo fazer isso apenas usando 2 níveis… óia só:
from Company
where ((c.companyParent.cnpj = ‘1000’)
or (c.cnpj = ‘1000’))
Obrigado pela atenção… abraço
Nesse caso voce tem um sério problema, pq a priore esse tipo de relacionamento não funciona bem em bancos relacionais e o hibernate, ate onde eu sei, não possui qualquer tipo de suporte.
As queries do hibernate não tem como burlar o modelo relacional, então aquilo que vocé não faz com sql (extensões de bancos não contam) não tem como ser feito por HQL.
Existem algumas alternativas, mas nenhuma é a solução ideal.
Usar uma tabela que cria uma versão ‘flatten’ da hierarquia, mais trabalho para manter, porém as pesquisas em profundidade, como a sua, ficam bem mais rápidas.
Fazer a recursão na mão usando relacionamentos do hibernate:
public static void flatten(Empresa e, Collection c) {
c.addAll(e.getFilhas());
for(Iterator i = e.getFilhas().iterator(); i.hasNext();)
flatten((Empresa)i.next());
}
Usar a extensão do seu RDBMS e pesquisar pela chave primaria de todas filiais e usar esses dados com HQL para receber os objetos.
Olá,
Se eu intendi, vc precisa de um SQL hierarquico? Qual teu RDBMS?
[]'s
Olá pessoal…
Antes de tudo, Obrigado pelos esclarecimentos…
Bom, estou utilizando oracle 8i num linux…
abraço
Aew,
Como o SQL Hirerarquico não é padrão cada banco faz a sua implementação não sei como o Hibernate trabalha com isso, até pq não utilizo ele. Agora o Oracle aceita isso perfeitamente, mas como eu disse é um extenção do SQL padrão.
Não sei se tem como fazer isso junto com o Hibernate ou mesmo separado dele.
Agora se tu precisa de ajuda para montar este SQL é só falar que eu te dou uma mão, precisando é só postar a estrutura da tabela e como tu precisa das info.
[]'s
Valew…
Vou dar uma olhada aki no que fazer… qq coisa eu choro pra vcs…
obrigado a todos…
abraço