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
Linda Hamiltonoriginal
2024-12-06 01:30:13725parcourir

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

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:
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