English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
A estrutura do banco de dados é a seguinte
A tabela strategy possui chaves estrangeiras member_id (relacionada à tabela member) e strategy_category (relacionada à tabela category), enquanto a tabela member possui a chave estrangeira position_id (relacionada à tabela positions)
Se a página frontal diretamente consultar o conteúdo da tabela stategy, nossa instrução hql será assim
Stringhql="FromStrategywhereid=:id";
O console reportará o erro 'nosession' porque o carregamento perezoso padrão do hibernate só carrega os objetos associados quando necessário. Aqui, quando precisamos pegar os atributos dos objetos associados na nossa interface frontal, a sessão já foi fechada, então é relatado esse erro.
Então, como resolver isso?
Aqui é recomendado usar leftjoinfetch para carregar objetos em vez de mudar o carregamento perezoso padrão da anotação para carregamento urgente, pois a eficiência será muito baixa.
Aqui está a sentença:
Strategystrategy=(Strategy)sessionFactoryUtil.getSession() .createQuery("FromStrategysleftjoinfetchs.strategyCategoryleftjoinfetchs.memberleftjoinfetchs.member.positionswheres.id=:id") .setInteger("id",id).uniqueResult();
Aqui está o que precisar ser notado: porque a tabela member associada está associada à tabela positions, é necessário carregar a outra. Outra coisa a notar é que o s.id deve ser escrito assim, porque o nome da chave primária de cada tabela é id. Se não for especificado, o sistema não pode identificar.
Resumo
Isso é tudo sobre o conteúdo do artigo sobre uma breve discussão sobre o problema de carregamento urgente do hibernate (associação de várias chaves estrangeiras). Espero que ajude a todos. Amigos interessados podem continuar a ler outros tópicos relacionados deste site. Se houver点什么不足之处,欢迎留言指出。感谢朋友们对本站的支持!
Declaração: O conteúdo deste artigo é extraído da Internet, pertencente ao respectivo proprietário. O conteúdo é contribuído e carregado voluntariamente pelos usuários da Internet. Este site não possui direitos de propriedade, não foi editado manualmente e não assume responsabilidade por eventuais responsabilidades legais. Se você encontrar conteúdo suspeito de violação de direitos autorais, por favor, envie um e-mail para: notice#oldtoolbag.com (ao enviar e-mail, substitua # por @ para denunciar e forneça provas relevantes. Se confirmado, o site deletará imediatamente o conteúdo suspeito de violação de direitos autorais.)