OpenSessionInView : une mise en garde dans Spring Boot
La propriété spring.jpa.open-in-view dans Spring Boot a été une source de confusion pour de nombreux développeurs. Examinons son objectif, sa valeur par défaut et ses conséquences potentielles.
Qu'est-ce qu'OpenSessionInView ?
OpenSessionInView (OSIV) est une fonctionnalité qui maintient EntityManagerFactory ouverte pendant toute la durée de la requête. -cycle de réponse. Cela permet à Hibernate (le fournisseur de persistance sous-jacent) d'initialiser automatiquement les entités chargées paresseusement, même lorsque la transaction a été validée.
Valeur par défaut
Dans Spring Boot 2.0 et Auparavant, OSIV était activé par défaut s'il n'était pas explicitement défini. Il s'agit principalement d'une compatibilité ascendante avec les anciennes versions d'Hibernate qui nécessitent qu'OSIV fonctionne correctement.
Les inconvénients d'OSIV
Bien que destiné à simplifier l'initialisation des objets, OSIV peut entraîner des problèmes importants problèmes de performances et limitations d'évolutivité :
Désactivez OSIV
Pour désactiver OSIV et restaurer une gestion appropriée des ressources, définissez spring.jpa.open-in-view =false dans votre application.properties file.
LazyInitializationException
Si vous désactivez OSIV, vous pouvez rencontrer LazyInitializationException lors de l'accès à des entités chargées paresseusement. Pour résoudre ce problème, utilisez l'annotation @Fetch d'Hibernate ou la récupération rapide explicite dans vos requêtes JPQL.
Conclusion
OpenSessionInView peut sembler un moyen pratique d'éviter les exceptions d'initialisation paresseuse, mais ses inconvénients potentiels l’emportent sur ses avantages. Dans les applications Spring Boot modernes, OSIV doit être désactivé pour garantir des performances et une utilisation optimales des ressources.
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!