English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Breve análise do problema de carregamento urgente do Hibernate (associação de chave estrangeira múltipla)

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.)

Você também pode gostar