2011-04-14 4 views
0

Je travaille sur le développement d'une application web avec Spring Framework 3.0.5 et Hibernate Framework 3.6 et j'ai quelques questions à lui poser. J'utilise Transaction Management avec des annotations. (@Transactional) et mon DAO est écrit sur l'API Hibernate 3.Gestion des transactions avec Spring, Hibernate et mySQL, questions supplémentaires (utilisation d'hibernate sans transactions ..)

1) Comment puis-je remarquer qu'une transaction est annulée? (Je veux dire, je dois attraper des exceptions? Ou peut-être vérifier après, si tout a fonctionné? @ Entourant @ transactional-méthodes avec try-catch ne me semble pas une bonne chose)

2) Est-il correct que la gestion des transactions avec @transactional ne fonctionne pas (pas de restauration) quand j'attrape l'exception? (quand j'entoure l'appel d'une méthode transactionnelle avec try-catch)

3) Est-il possible d'utiliser Hibernate SANS utiliser les transactions? donc je pourrais utiliser Spring avec Hibernate mais sans Transaction Management? Si il n'est pas possible d'utiliser Hibernate sans utiliser de transactions, cela signifie que mon système de gestion de base de données doit toujours supporter des moteurs transactionnels (comme InnoDB). Je ne peux pas utiliser une table myISAM avec Hibernate alors? Ce serait un gros inconvénient d'hiberner alors !?

merci :-)

Répondre

3
  1. Spring rollback automatiquement une transaction si une exception d'exécution est lancée à partir d'une méthode annotée avec @Transactional. En général, vous ne vous souciez pas de savoir s'il est annulé ou non, car l'exception se propage jusqu'à la pile d'appels. Si vous avez vraiment besoin de savoir si la transaction est annulée, utilisez TransactionAspectSupport.currentTransactionStatus().isRollbackOnly(). Non. Si vous interceptez une exception d'exécution provenant d'une méthode transactionnelle, la transaction utilisée pour exécuter cette méthode est annulée.

  2. Non. Vous avez besoin de transactions pour utiliser Hibernate, et c'est une bonne chose. Faire une base de données sans transactions est une recette pour les catastrophes.

  3. Oui, vous avez besoin d'un moteur transactionnel.

+0

Merci! Je voudrais juste comprendre pourquoi les gens ne se soucient généralement pas si une transaction est annulée ou non. Par exemple, lorsqu'un utilisateur souhaite s'inscrire et que cela ne fonctionne pas, la transaction est annulée. Mais puisque je ne le saurai pas, je n'informerai pas l'utilisateur. Je ne pense pas que ce soit une bonne stratégie. Je vais jeter un oeil à "TransactionAspectSupport.currentTransactionStatus(). IsRollbackOnly()", comme vous le recommandiez. Je voudrais aussi savoir pourquoi il y a un article sur la page Web hibernates qui décrit comment accéder aux données sans transaction, s'il n'est pas possible d'utiliser hibernate sans transactions :-) – nano7

+0

C'est l'article que j'ai mentionné. http://community.jboss.org/wiki/Non-transactionaldataaccessandtheauto-commitmode Peut-être ai-je mal compris quelque chose ...? Merci pour l'instant! :-) – nano7

+2

@ nano7: S'il n'y a pas d'exception, la transaction n'a pas été annulée. S'il y a une exception, la transaction est annulée et l'exception se propage, jusqu'à ce qu'elle soit gérée dans la couche de présentation, où l'utilisateur peut être informé. Pas besoin de tester la restauration s'il n'y a pas d'exception. –

Questions connexes