IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Hibernate Java Discussion :

Annotation @Transactional et rollbacks


Sujet :

Hibernate Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 38
    Points : 22
    Points
    22
    Par défaut Annotation @Transactional et rollbacks
    Salut

    J'utilise depuis peu warp persist et un frameworkd d'un ami et tous deux utilisent une annotation @Transactional, qui s'occupe de l'ouverture/fermeture des transactions sur une méthode.

    Ainsi on est sûr que celle ci tourne dans une transaction, avec ce que cela implique de commit si la fin de la méthode est atteinte.

    Je ne comprends pas trop par contre comment sont gérés les rollbacks. Un exemple concret est sur une méthode @Transactional save(Entity e). Si jamais pour une raison ou une autre celle ci échoue, que ce passe t il ? La sauvegarde est rollbacké et mon code continu ? N'y a t il pas des risques que je considère l'entité comme sauvée alors qu'elle ne l'est pas ?

    Comment gérez vous vous même ce genre d'annotation ? Quel est leur meilleur usage ?

    merci !
    @+
    nono

  2. #2
    Membre confirmé Avatar de gronono
    Inscrit en
    Novembre 2003
    Messages
    456
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Novembre 2003
    Messages : 456
    Points : 482
    Points
    482
    Par défaut
    Bonjour,

    Dans une méthode annotée transactionnal, le commit se fait si la méthode ne renvoie pas d'exception. Dans le cas contraire, elle fait un rollback et l'exception est remonté à l'appelant.

    Donc dans le cas du rollback, ton entity n'est pas sauvegardée en base. Et tu as une Exception.

    (Dans le cas de Spring, par défaut, seuls les RuntimeException provoquent un rollback).

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 38
    Points : 22
    Points
    22
    Par défaut
    merci !

    je me suis dit la même chose depuis, et je me disais que je tenterai bien la chose pour voir comment se comporte mon appli web. J'imagine que l'idéal serait que toutes les modifs précédentes soient rollbackées, mais je ne suis pas certain que cela se passe ainsi.

    A priori je suis dans le cas d'une stratégie "open session in view" : si pendant la session deux méthodes avec @Transactional sont appelées et que la 2eme plante, la 1ere est elle rollbackée aussi ?

    @+
    nono

  4. #4
    Membre confirmé Avatar de gronono
    Inscrit en
    Novembre 2003
    Messages
    456
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Novembre 2003
    Messages : 456
    Points : 482
    Points
    482
    Par défaut
    Citation Envoyé par livenono
    A priori je suis dans le cas d'une stratégie "open session in view" : si pendant la session deux méthodes avec @Transactional sont appelées et que la 2eme plante, la 1ere est elle rollbackée aussi ?
    Ca dépend de la stratégie de propagation définie. Par défaut, je crois que oui.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 38
    Points : 22
    Points
    22
    Par défaut
    Hum, faut que je vérifie aussi ce second point. Pour le premier, et l'histoire de l'exception en cas d'erreur lors de la transaction, je confirme.

  6. #6
    Membre confirmé Avatar de gronono
    Inscrit en
    Novembre 2003
    Messages
    456
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Novembre 2003
    Messages : 456
    Points : 482
    Points
    482
    Par défaut
    Sur le projet sur lequel je travaille, on utilise propagation = Propagation.REQUIRED. Dans cette stratégie, si une erreur provient dans la seconde méthode, alors la première est aussi "rollbackée".

    D'après les sources org.springframework.transaction.annotation.Transactional, il s'agit de la stratégie par défaut.

    Gronono

Discussions similaires

  1. EntityManager transaction commit rollback
    Par jmturc dans le forum JPA
    Réponses: 3
    Dernier message: 25/07/2011, 09h42
  2. Transaction et rollback en cours
    Par Débéa dans le forum Oracle
    Réponses: 2
    Dernier message: 11/10/2010, 23h43
  3. [Data] [Transaction] @Transactional - le rollback ne fonctionne pas
    Par romaintaz dans le forum Spring
    Réponses: 6
    Dernier message: 11/10/2009, 17h23
  4. Gestion transaction MySQL (rollback)
    Par mictif dans le forum Débuter
    Réponses: 1
    Dernier message: 21/09/2009, 17h02
  5. Sécuriser une transaction avec rollback
    Par AIRONE dans le forum Sécurité
    Réponses: 1
    Dernier message: 14/09/2007, 14h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo