2016-04-10 2 views
0

Ich möchte eine Entität von zwei Entitäten zurücksetzen, um in einer Methode bestehen zu bleiben. Wenn eine Ausnahme erhalten wird, wird andere Rollback ausgeführt. Wie zum Beispiel ..wie ein Rollback einer Entität aus zwei Entitäten in jpa beibehalten wird

@Autowired 
    XYZDao xyzDao; 

    private XYZ beanXYZ; 

    @Autowired 
    ABCDao abcDao; 

    private ABC beanABC; 

    public void saveBoth(){ 
    try { 
     xyzDao.persist(beanXYZ); 
     abcDao.persist(beanABC); 

     } catch (Exception e) { 
     logger.error("This is error : " + e); 
     logger.fatal("This is fatal : " + e); 
     } 
    } 

Wie kann ich beide Entitäten zurücksetzen, wenn eine nicht beibehalten wird. Bitte schlagen Sie mir ...

Antwort

0

Sie können Ihre saveBoth()-Methode mit @Transactional Annotation kommentieren.

@Transactional 
public void saveBoth(){ 
try { 
    xyzDao.persist(beanXYZ); 
    abcDao.persist(beanABC); 

    } catch (Exception e) { 
    logger.error("This is error : " + e); 
    logger.fatal("This is fatal : " + e); 
    } 
} 

auch bei this Link für ein besseres Verständnis dafür, wie Transaktion und wie so konfiguriert werden, sehen Sie es funktioniert.

+0

Dank @Abdullah Wasi für eine gute Lösung. '@Transactional' Annotation funktioniert gut. Danke .. –

+0

Bitte auch upvote meine Antwort, wenn es Ihnen geholfen hat. Danke Bruder. –

0

Das gewünschte Verhalten wird von Transaktion Mechanismus zur Verfügung gestellt. Sie können dies erreichen, indem Sie ein neues DAO für den kombinierten Vorgang erstellen, das Operationen zum Speichern beider Beans in einer Transaktion enthält. So etwas wie unten:

persistAbcAndXyz(BeanABC beanABC, BeanXYZ beanXYZ){ 
    try{ 
     //get transaction from EMF and begin 
     //emf.getTransaction().begin() 

     //save beanABC 
     //save beanXYZ 

     //emf.getTransaction().commit() 
    } 
    catch(PersistenceException ex){ 
     //rollback transaction 
     //emf.getTransaction().rollback(); 
    } 
} 

Wenn Ihr DAOs beziehen sich auf verschiedene Datenbanken, so dass sie nicht denselben EntityManagerTransaction teilen könnten, können Sie externe Transaktionsmanagement-Bibliothek wie Spring-Transaktionen verwenden.

Verwandte Themen