2016-04-10 13 views
0

2つのエンティティから1つのエンティティをロールバックして、ある例外が発生した場合に他のエンティティがロールバックされるメソッドでロールバックします。同様に..エンティティから2つのエンティティからエンティティをロールバックして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

saveBoth()メソッドに@Transactional注釈を付けることができます。

@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

もしあなたが助けてくれたら、私の答えをupvoteしてください。ありがとう、兄弟。 –

0

あなたが望む動作は、トランザクションメカニズムによって提供されます。これを実現するには、両方のBeanを1つのトランザクションに保存する操作を含む結合操作用の新しいDAOを作成します。以下のような何か:

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は、彼らがTransactionEntityManager同じを共有することができなかったような異なるデータベースを参照してください場合は、あなたが春の取引のような外部のトランザクション管理ライブラリを使用することができます。

関連する問題