2012-07-12 1 views
2

J'utilise la gestion de transaction de base de données déclarative de Spring en utilisant l'annotation @Transactional sur mes méthodes java.Comment peut-on commettre explicitement une transaction spring db lors de l'utilisation de la gestion des transactions déclarative?

Dans un cas, je voudrais explicitement valider la transaction en cours (celle qui enveloppe la méthode en cours d'exécution) avant le retour de la méthode.

Comment cela peut-il être fait?

J'ai essayé de câbler automatiquement le HibernateTransactionManager actuel à partir du contexte de printemps et de l'utiliser pour valider, mais cela ne valide pas la transaction.

Le code que j'ai essayé est:

transactionManager.commit(transactionManager 
    .getTransaction(new DefaultTransactionDefinition())); 
+0

Je * pense * la réponse courte est que vous ne pouvez pas, mais pouvez-vous donner un exemple de pourquoi vous voulez le faire? Cela peut aider à identifier une meilleure solution - éventuellement en utilisant une transaction REQUIRES_NEW, ou en vidant votre session d'hibernation (ou entityManager si vous utilisez JPA). – MattR

Répondre

1

je ne l'ai pas essayé, mais vous pourriez être en mesure de le faire avec un truc que je peux penser à

obtenir l'aide TransactionStatus TransactionAspectSupport.currentTransactionStatus() injectez le gestionnaire de transactions à votre bean (en supposant que vous utilisez hibernate) essayez d'appeler doCommit (état DefaultTransactionStatus) dans le gestionnaire de transactions.

essayer ceci ne sais pas cela fonctionnera ou non parce que par ressort doc

transaction

Nous vous encourageons fortement à utiliser l'approche déclarative pour rollback si possible. Le rollback programmatique est disponible si vous en avez absolument besoin, mais son utilisation va à l'encontre de l'obtention d'une architecture propre POJO .

Je n'ai pas testé mais si vous définissez setRollbackOnly sur TransactionStatus qui pourrait également faire le travail.

Questions connexes