Question

J'ai une méthode de service unique annotée avec Propagation.Required. Il effectue trois opérations distinctes.

  1. Insérer le tableau 1 de la table z si aucun enregistrement ne dans le tableau 1
  2. Insérer / Mettre à jour le tableau 1 par utilisateur modifications / ajouts
  3. Supprimer les enregistrements x du tableau 1

Pardonnez mon ignorance, mais ne devrait pas tous ces exécutés sous une seule transaction? En ce sens, si la troisième requête est exécutée dans une exception, ne doit pas le premier et deuxième rollback aussi? Cela ne se produit pas dans mon cas. Hibernent paramètre autocommit affecter les limites de TXn de quelque façon? Validation automatique est réglé sur vrai dans mon cas. Ce que je requiers le commettras devrait avoir lieu dans l'une de ces tables que si tous les succès.

Était-ce utile?

La solution

Oui, le paramètre de propriété Hibernate connection.autocommit aura une incidence sur les limites des transactions.

Si vous réglez ce paramètre sur true, Hibernate va mettre la connexion JDBC sous-jacente en mode autocommit, qui se terminera chaque instruction que vous exécutez dans sa propre transaction de base de données.

Ainsi, par exemple, si votre troisième requête / instruction échoue, que votre troisième requête / déclaration va s'annulée.

Pour exécuter tous les trois comme une seule unité, vous devez avoir auto-validation et d'exécuter tous les trois dans le cadre d'une transaction unique, déclarative ou autrement.

Autres conseils

pourriez-vous essayer d'ajouter une couche supérieure que la couche de service et de transaction à partir de là.

Vous ne voulez certainement pas autocommit. Ce sera probablement engager après chaque opération. Commutateur AutoCommit, et ajouter une validation explicite à la fin.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top