Tout d'abord, la gestion des transactions doit être effectuée sur la couche service, et non sur la couche DAO car cela créerait beaucoup de surcharge de performance (pour gérer le niveau d'isolement des transactions et la propagation appropriés à chaque méthode différente). En outre, la portée d'une unité de travail provient de la couche service au lieu de la couche d'accès aux données: imaginez effectuer un processus métier qui doit traiter avec 2 DAO ou plus.
Il y a beaucoup de discussions sur Internet qui vont dans ce sens comme ici , ici et ici .
Quoi qu'il en soit, puisqu'il s'agit d'une interview, acceptons la question telle quelle. De mon point de vue, vous utiliseriez l' @Transactional
annotation (ou la configuration XML) dans les deux méthodes et avec une propagation de transaction avec REQUIRED
valeur. De cette façon, lorsqu'une de ces méthodes est invoquée et si aucune transaction précédente n'existe, une nouvelle transaction sera créée:
@Transactional
class MyDAO {
@Transactional(propagation = REQUIRED)
public void foo() {
}
@Transactional(propagation = REQUIRED)
public void bar() {
}
}
Alonso Dominguez
la source
foo()
etbar()
partage la même transaction et si 1 échoue, un autre sera également annulé? Pouvez-vous apporter quelques éclaircissements?@Transactional(propagation = REQUIRED)
méthode de couche DAO pour la propagation et la@Transactional
couche de service, mais si je mets@Transactional
uniquement sur la couche de service au lieu de la mettre sur la couche DAO, quelle est la différence?propagation = REQUIRED
est la valeur par défaut pour la propagation d'annotation transactionnelle, il n'est donc pas nécessaire de l'écrire.Ignorant le ressort et les cadres dans ma réponse ..... juste l'idée de base d'utiliser des paramètres de fonction. Je suis sûr que le concept pourrait s'appliquer dans [insérer le cadre ici].
Vous devrez gérer la validation / restauration en dehors des 2 méthodes DAO. Les 2 méthodes devraient prendre la transaction / connexion en entrée.
code pseudo:
la source
Tran t
en paramètre avec les deux méthodes. Pouvez-vous fournir quelques explications?Il est possible que deux méthodes fonctionnent de manière indépendante, en même temps qu'elles s'exécutent dans une même transaction. Nous devons donc utiliser la propagation requise. Si la transaction doit s'exécuter dans la même transaction, elle utilisera la première transaction, sinon une nouvelle transaction sera créée si elle est invoquée indépendamment. Corrigez-moi si je me trompe.
la source