Java Spring @méthode est de ne pas rouler de retour comme prévu

Ci-dessous est un aperçu rapide de ce que je suis en train de faire. Je veux pousser un enregistrement à deux différentes tables dans la base de données à partir d'un appel de méthode. Si quelque chose échoue, je veux que tout pour faire reculer. Donc, si insertIntoB échoue, je veux quelque chose qui serait commis dans insertIntoA être annulées.

public class Service {
    MyDAO dao;

    public void insertRecords(List<Record> records){
        for (Record record : records){
            insertIntoAAndB(record);
        }
    }

    @Transactional (rollbackFor = Exception.class, propagation = Propagation.REQUIRES_NEW)
    public void insertIntoAAndB(Record record){
        insertIntoA(record);
        insertIntoB(record);
    }

    @Transactional(propagation = Propagation.REQUIRED)
    public void insertIntoA(Record record){
        dao.insertIntoA(record);
    }

    @Transactional(propagation = Propagation.REQUIRED)
    public void insertIntoB(Record record){
        dao.insertIntoB(record);
    }

    public void setMyDAO(final MyDAO dao) {
        this.dao = dao;
    }
}

MyDAO dao est une interface qui est mappé à la base de données à l'aide de mybatis et est défini à l'aide de Printemps injections.

Maintenant si insertIntoB échoue, tout de insertIntoA encore poussé à la base de données. Comment puis-je corriger ce problème?

EDIT:

J'ai modifié la classe de donner une description plus précise de ce que je suis en train de réaliser. Si je lance insertIntoAAndB directement, le roll back fonctionne si il y a des problèmes, mais si je l'appelle insertIntoAAndB de insertRecords, la restauration ne fonctionne pas si des problèmes surviennent.

OriginalL'auteur Franklin | 2013-06-20