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