2014-05-08 24 views
0

在下面的文章中說,PROPAGATION_REQUIRED在Spring的事務

enter link description here

PROPAGATION_REQUIRED - 支持當前事務;如果不存在,則創建一個新的。

下面的代碼是惰性產品,然後是兩個表的產品詳細信息。

public void save(Product product, int qoh){ 

     productDao.save(product); 
     System.out.println("Product Inserted"); 

     ProductQoh productQoh = new ProductQoh(); 
     productQoh.setProductId(product.getProductId()); 
     productQoh.setQty(qoh); 

     productQohBo.save(productQoh); 
     System.out.println("ProductQoh Inserted"); 
    } 

我的問題是何時會發生這種行爲?我的意思是一個當前交易如何結束?保存還是更新後?

如果我們使用PROPAGATION_REQUIRED假設當前事務在插入產品後結束。那麼新的交易來了,但如果在插入產品數量時出現任何故障,它只會回滾數量而不是輸入的產品詳細信息?那麼數據是不一致的呢?

回答

0

這取決於您在哪裏應用了事務聲明規則。

我想提供的例子是從Service層。如果是這樣,將事務聲明應用於服務層以維護完整性將是明智的。

1

在你的例子中,如果拋出一個異常(因爲輸入了不正確的數據),整個方法會回滾,留下沒有插入任何東西。假定您已註釋save方法@Transactional。如果你註釋你的DAO方法@Transactional那麼你會得到一些對象被插入,有些則不被插入。最好在Service層保留註釋,這樣你就知道你的數據庫不會因部分失敗而被弄髒。

TL; DR:要麼將所有內容保存到數據庫中,要麼沒有內容保存到數據庫中。