Maison >Java >javaDidacticiel >Devriez-vous utiliser la session ouverte d'Hibernate dans View Pattern ?
Les inconvénients du modèle de session ouverte en vue d'Hibernate
Le modèle de session ouverte en vue d'Hibernate (OSIV) maintient une session ouverte tout au long de la durée d'une requête. cycle de vie. Bien que cette approche puisse sembler pratique, elle comporte plusieurs pièges :
1. Absence de contrôle transactionnel
OSIV permet la manipulation de données en dehors des transactions gérées, entraînant des incohérences de données. Chaque instruction exécutée pendant le rendu de l'interface utilisateur se produit en mode de validation automatique, ce qui augmente la surcharge d'E/S et compromet potentiellement les performances de la base de données.
2. Mélange de préoccupations
OSIV brouille la séparation entre les couches de service et d'interface utilisateur, car les déclarations sont générées par les deux. Cela complique les tests et rend plus difficile l'isolation des couches.
3. Problèmes de performances des requêtes N 1
OSIV limite la couche d'interface utilisateur à la navigation dans les associations, ce qui peut entraîner des problèmes de requête N 1. Bien qu'Hibernate fournisse des atténuations telles que @BatchSize et FetchMode.SUBSELECT, elles affectent le plan de récupération par défaut et peuvent ne pas être optimales pour tous les scénarios.
4. Gestion des ressources
OSIV maintient la connexion à la base de données ouverte tout au long de la phase de rendu de l'interface utilisateur. Ce bail de connexion étendu peut créer une congestion dans le pool de connexions, limitant l'évolutivité et le débit.
Alternatives à OSIV
Pour éviter les LazyLoadExceptions tout en répondant aux limites d'OSIV, considérez ces stratégies alternatives :
Désactivation d'OSIV dans Spring Boot
Dans Spring Boot, OSIV est activé par défaut. Pour le désactiver, ajoutez la propriété suivante à votre fichier de configuration application.properties :
spring.jpa.open-in-view=false
En désactivant OSIV, vous pouvez mieux contrôler la récupération des données, garantir l'intégrité des transactions et améliorer les performances des applications.
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!