Maison > Java > javaDidacticiel > Hiberner une session ouverte en vue : utiliser ou ne pas utiliser ?

Hiberner une session ouverte en vue : utiliser ou ne pas utiliser ?

Linda Hamilton
Libérer: 2024-12-06 01:30:13
original
787 Les gens l'ont consulté

Hibernate Open Session in View: To Use or Not to Use?

Session ouverte Hibernate en vue : une pratique controversée

Introduction

Session ouverte en vue (OSIV) est une fonctionnalité Hibernate qui permet à la session Hibernate de rester ouverte pendant le cycle demande-réponse. Cette pratique a fait l'objet de débats au sein de la communauté Java, certains prônant sa commodité tandis que d'autres remettent en question ses inconvénients.

Problèmes avec OSIV

OSIV présente plusieurs défis :

  • Traitement des transactions incohérent : OSIV maintient la session ouverte indéfiniment, en contournant le cycle de vie typique des transactions. Cela peut entraîner des conséquences inattendues, telles que des problèmes de cohérence des données.
  • Dégradation des performances de la base de données : Garder une session ouverte exerce une pression sur la base de données, car toute instruction supplémentaire exécutée pendant le traitement de la réponse (par ex. , initialisation d'association paresseuse) sont émis en mode de validation automatique.
  • Séparation des couches floues : OSIV brouille la séparation des préoccupations entre la couche métier et la phase de rendu de l'interface utilisateur, ce qui rend difficile le test et la maintenance de l'application.
  • Durée de location de connexion augmentée : La session peut être maintenue ouverte pendant une période période prolongée, limitant les ressources du pool de connexions à la base de données.

Alternative Stratégies

Pour éviter ces problèmes, les développeurs peuvent utiliser des stratégies alternatives :

  • Initialiser explicitement les associations paresseuses : Initialiser les associations paresseuses dans la couche de service à l'aide de Join Récupérer ou FetchMode.SUBSELECT.
  • Créer un DAO séparé Requêtes : Écrivez des requêtes DAO spécifiques pour la couche d'interface utilisateur, adaptées pour récupérer uniquement les associations nécessaires.
  • Utiliser les projections d'affichage : Créez des projections qui renvoient uniquement les champs essentiels nécessaires à la Interface utilisateur plutôt que des entités complètes.
  • Utilisez FetchMode.LAZY et EAGER Loading : Configurez FetchMode.LAZY pour les entités qui ne sont pas immédiatement requises et FetchMode.EAGER pour les associations qui doivent être chargées à l'avance.

Désactivation d'OSIV dans Spring Boot

Spring Boot active OSIV par défaut. Pour le désactiver, définissez la propriété suivante dans le fichier application.properties :

spring.jpa.open-in-view=false
Copier après la connexion

Ce paramètre garantit que la session Hibernate est fermée après chaque transaction de couche de service, évitant ainsi les inconvénients potentiels associés à OSIV.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal