2016-04-10 91 views
0

我想從兩個實體回滾一個實體,以便在一個方法中持續存在,如果一個方法得到異常,那麼另一個方法將回滾。 Like ..如何從兩個實體回滾實體以保持jpa

@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); 
     } 
    } 

如何在沒有持續存在的情況下回滾兩個實體。 請建議我...

回答

0

您可以使用@Transactional註釋來註釋您的saveBoth()方法。

@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); 
    } 
} 

難道還看this鏈接,更好地理解交易是如何進行配置和它是如何工作。

+0

感謝@Abdullah Wasi提供了很好的解決方案。 '@Transactional'註釋效果很好。謝謝.. –

+0

如果它對您有幫助,也請提出我的答案。謝了,兄弟。 –

0

你想要的行爲是由交易機制提供的。您可以通過爲組合操作創建新的DAO來實現此目的,其中包含將兩個Bean保存在一個事務中的操作。類似下面:

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(); 
    } 
} 

如果你的DAO是指不同的數據庫,使得他們不能共享相同的EntityManagerTransaction,您可以使用外部事務管理庫,比如Spring的事務。