2013-05-09 3 views
1

J'avais utilisé @Transactional annotations dans ma couche Service. Mais pour résoudre une erreur due à Lazy Loading in View, j'ai dû utiliser Open Session in View Filter. Après cela, sans l'utilisation de @Transaction elle-même une session est ouverte et la transaction commence. Cela signifie-t-il que @Transactions n'est pas nécessaire? Comment les transactions et les roll-backs seront-ils traités, puis dans les couches de service?Ouvrir une session dans View vs @Transactional

Répondre

3

The javadoc explique:

Ce filtre permet Hibernate Sessions disponibles via le thread en cours, qui sera détecté automatiquement par les gestionnaires de transactions. Il convient aux transactions de couche service via HibernateTransactionManager ou JtaTransactionManager ainsi que pour l'exécution non-transactionnelle (si elle est configurée de manière appropriée). REMARQUE: Ce filtre ne vide pas la session Hibernate par défaut, avec le mode Flush défini sur FlushMode.NEVER. Il suppose d'être utilisé en combinaison avec les transactions de la couche service qui s'occupent du vidage: Le gestionnaire de transactions actif changera temporairement le mode de vidage en FlushMode.AUTO pendant une transaction en lecture-écriture, avec le mode de vidage réinitialisé à FlushMode.NEVER à la fin de chaque transaction. Si vous avez l'intention d'utiliser ce filtre sans transactions, pensez à changer le mode de vidage par défaut (via la propriété "flushMode").

+0

ne pouvait pas comprendre. cela signifie-t-il que je ne devrais pas utiliser @Transactional dans la couche de service. Pouvez-vous expliquer dans un meilleur sens ou peut-être un lien –

+3

Non. Cela signifie que vous devriez coder votre couche de service comme d'habitude, en utilisant @Transactional comme d'habitude. La différence est que la session restera ouverte même après que la transaction a été validée. –