English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
La structure de la base de données est la suivante
La table strategy contient des clés étrangères member_id (lié à la table member) et strategy_category (lié à la table category), tandis que la table member contient une clé étrangère position_id (lié à la table positions)
Si l'interface utilisateur frontend interroge directement le contenu de la table stategy, notre requête HQL pourrait être écrite ainsi
Stringhql="FromStrategywhereid=:id";
Le console affichera une erreur 'nosession' car hibernate charge par défaut de manière paresseuse les objets associés uniquement lorsque nous en avons besoin. Ici, lorsque nous devons extraire les attributs des objets associés à l'avant-plan, la session est déjà fermée, et c'est ainsi que l'erreur est signalée.
Alors, comment résoudre cela ?
Il est recommandé d'utiliser leftjoinfetch pour charger les objets plutôt que de changer le chargement paresseux par défaut de l'annotation en chargement urgent, ce qui serait très inefficace.
L'expression suivante :
Strategystrategy=(Strategy)sessionFactoryUtil.getSession() .createQuery("FromStrategysleftjoinfetchs.strategyCategoryleftjoinfetchs.memberleftjoinfetchs.member.positionswheres.id=:id") .setInteger("id",id).uniqueResult();
Il est important de noter que car la table member associée contient également une association avec la table positions, il est nécessaire de charger également celle-ci. Une autre chose à noter est que l'id de s doit être écrit ainsi, car le nom de la clé principale de chaque table est id. Si ce n'est pas spécifié, le système ne peut pas identifier.
Résumé
Voici le contenu complet de cet article sur l'examen des problèmes de chargement urgent de hibernate (association de plusieurs clés étrangères). J'espère que cela vous sera utile. Les amis intéressés peuvent continuer à consulter d'autres sujets pertinents sur ce site. Si vous trouvez des insuffisances, n'hésitez pas à laisser un message. Merci de votre soutien à ce site !
Déclaration : Le contenu de cet article est tiré d'Internet, propriété de ses auteurs respectifs, contribué et téléversé par les utilisateurs d'Internet de manière spontanée. Ce site ne détient pas de droits de propriété, n'a pas été édité par l'homme, et n'assume aucune responsabilité juridique. Si vous trouvez du contenu suspect de violation de droits d'auteur, veuillez envoyer un e-mail à : notice#oldtoolbag.com (veuillez remplacer # par @ lors de l'envoi d'un e-mail pour signaler une violation, et fournir des preuves pertinentes. Une fois vérifié, ce site supprimera immédiatement le contenu suspect de violation de droits d'auteur.)