Pessoal bom dia,
como faço essa consulta via query hibernate? Esse log veio do próprio hibernate mas ao tentar realizar dá erro!
select
listamemor0_.computador_id as computad1_4_0_,
listamemor0_.memoria_id as memoria_2_4_0_,
memoria1_.id as id1_12_1_,
memoria1_.ativa as ativa2_12_1_,
memoria1_.capacidade as capacida3_12_1_,
memoria1_.pentes as pentes4_12_1_,
memoria1_.tag as tag5_12_1_,
memoria1_.tipo as tipo6_12_1_,
memoria1_.totalmemoria as totalmem7_12_1_
from
Computador_Memoria listamemor0_
inner join
Memoria memoria1_
on listamemor0_.memoria_id=memoria1_.id
where
listamemor0_.computador_id=?
Explicando melhor o problema.
Tenho uma tela com uma lista de computadores representados em uma datatable via componente JSF PRIME com filtros ect…Porém, após filtrar um computador aleatório e clicar nele para expandir e ver os objetos contidos, como lista de memórias, etc… recebo o famoso lazyexception!!!O servidor Wildfly, como manipula as transações fecha a bagaça da conexão,mas esquece de abrir de novo…
Um saco pé no saco, a gambiarra que encontrei para resolver isso é fazer uma nova consulta, ou seja dar um um novo find!!! Mas a meu ver é uma puta gambiarra, alguém sabe uma forma mais inteligente de resolver isso?
J
javaflex
Usa HQL com fetch join para retornar o resultado completo enquanto a conexão estiver aberta. Query via lazy não é eficiente, gera n querys.
F
fabiofem
Grato pela resposta,
Realmente, essa solução é a mais citada.
Você sugere que coloque em cada método essa consulta HQL, tipo um
select c from computador join fech c.listaMemorias
Pode ser, mas se oriente por funcionalidade. Se o usuário terá consultas separadas de memórias e discos, crie duas querys. Se for um relatório com memórias, discos, etc, faça apenas 1 query que atenda esse resultado.
F
fabiofem
Como seria essa consulta em HQL? Até pq os relacionamentos nao sao bidirecionais.
Bom dia,
Desculpas, como assim, correto? O mapeamento é bem simples tenho um PC que tem listas de memórias, HDs, ect…vários componentes, tudo unidirecional. Pois não há necessidade que cada componente tenha acesso ao seu computador. A questão é que dessa forma, essa sua consulta não vai funcionar.
J
javaflex
Não é pra copiar o que fiz, foi só um exemplo ilustrativo de join com uma lista, baseado no link que te passei. Estude essa documentação e faz o HQL de acordo com suas necessidades. Isso é um capítulo a parte, a questão é que HQL resolverá o problema de lazy.
F
fabiofem
Amigo, se precisasse estudar a documentação não estaria entrando aqui no FORUM solicitando ajuda.
J
javaflex
Como vai usar um recurso complexo desses sem parar pra estudar? E tem que começar do mais simples e ir avançando, seguindo algum material de ensino. Quando tiver uma dúvida mais pontual é só postar. Da mesma forma que você reportou pontualmente sobre o problema do lazy com a conexão fechada sem seu controle, uma dica foi usar HQL retornando a consulta totalmente pronta. Já ensinar HQL ou realizar a prestação de serviço pra uma demanda aqui no fórum, pelo menos eu não faço isso.
F
fabiofem
São duas coisas distintas, você está fazendo confusão. Esse fórum, posso estar errado, foi crido com esse intuito, ou seja, de compartilhar conhecimento e ajudar que está com dificuldades. Recomendar alguém a estudar é passível quando esse alguém pede uma orientação do zero, ou seja quando é evidente que essa pessoa não quer se dar o trabalho de quebrar a cabeça, que não é o meu caso. Esse tipo de resposta, é desrespeitosa, haja vista que não pedi para resolver o meu problema. O melhor a se fazer, nesse tipo de situação, é ser honesto, responder que também não sabe, ao invés de simplesmente mandar a pessoa que está com dificuldade estudar. Na real é até arrogante de sua parte e bem imaturo, este fórum foi criado para ajudar as pessoas e não para destilar ódio ou eventuais frustrações pessoais.
J
javaflex
Cara, isso não leva a nada, é o que pude ajudar e não impede de esperar outras respostas. Você está iniciando em HQL agora, então o normal seria primeiro estudar, tentar algo, postar a dúvida com código que tentou.