Maison >Java >javaDidacticiel >La session ouverte dans View est-elle le bon choix ? Pièges et meilleures alternatives

La session ouverte dans View est-elle le bon choix ? Pièges et meilleures alternatives

Linda Hamilton
Linda Hamiltonoriginal
2024-12-02 14:16:12998parcourir

Is Open Session in View the Right Choice? Pitfalls and Better Alternatives

Hibernate Open Session in View : pièges et alternatives

Open Session in View, malgré son apparente simplicité, souffre de plusieurs inconvénients qui incitent à la prudence dans son utilisation.

Problèmes avec la session ouverte en vue

Bien que l'approche puisse atténuer les problèmes dans une JVM isolée Dans certains scénarios, cela a un coût :

  • Mode de validation automatique dans le rendu de l'interface utilisateur : Une fois la transaction de la couche de service terminée et la fermeture de la session, le rendu ultérieur de l'interface utilisateur déclenche la validation automatique pour chaque déclaration, augmentant la charge de la base de données en raison d'E/S excessives.
  • Perte de séparation des préoccupations : La génération d'instructions couvre à la fois le service et Couches d'interface utilisateur, compliquant les tests d'intégration et l'isolement de la logique métier.
  • Problèmes potentiels de requête N 1 : La navigation dans l'interface utilisateur est limitée à la traversée des associations, ce qui peut exacerber les problèmes de performances lorsque les associations ne sont pas récupérées avec impatience .
  • Augmentation de la durée du bail de connexion : La connexion à la base de données peut rester ouverte tout au long du rendu de l'interface utilisateur, entraînant une congestion et débit de transaction limité.

Stratégies alternatives

Pour éviter les pièges de l'Open Session in View, envisagez ces alternatives :

  • Récupération hâtive : Récupérez toutes les associations nécessaires dans la portée EntityManager, en garantissant que l'initialisation paresseuse n'est pas déclenchée pendant l'interface utilisateur rendu.
  • Personnalisation du mode de récupération : Utilisez les annotations @BatchSize et FetchMode.SUBSELECT d'Hibernate judicieusement pour optimiser la récupération d'association sans affecter tous les scénarios métier.
  • Couche d'accès aux données requêtes : Créez des requêtes sur mesure qui répondent spécifiquement aux exigences spécifiques de récupération de données d'une utilisation particulière cas.

Configuration Spring Boot

Dans Spring Boot, l'ouverture de session dans View est activée par défaut. Pour le désactiver, définissez la propriété suivante dans la configuration application.properties :

spring.jpa.open-in-view=false

Cela forcera la gestion appropriée des LazyInitializationExceptions, évitant ainsi les conséquences indésirables associées à l'ouverture de session dans View.

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