我們有一個Spring事務回滾問題,其中回滾看起來沒有工作。
在我的服務層方法中,用@Transactional
註釋,我調用三個不同的DAOImpl
類來插入3條記錄。
中間插入從第4個表中獲取填充描述字段,但是失敗。我期望第一次插入回滾,但似乎並沒有發生。
幾點:Spring事務不會回滾
- '獲取' 方法拋出運行時異常
- 我們使用
org.springframework.jdbc.datasource.DataSourceTransactionManager
和MySQL datasource
在applicationContext.xml
定義。豆類在Beans.xml
創建了被導入到ApplicationContext.xml
- 沒有
@Transactional
標註在DAO
層 - 我們在
applicationContext.xml
- 再次使用
<tx:annotation-driven transaction-manager="transactionManager"/>
我們使用Spring 3.1
UPDATE:
代碼片段....
服務類 - 這與我所擁有的東西類似......我使用和不使用@Autowired進行測試。事務啓用方法在服務類中調用。
public class CustomerService { //@Autowired CustomerOrderDAO customerOrderDAOImpl; //@Autowired CustomerItemDAO customerItemDAOImpl; //@Autowired CustomerPromotionDAO customerPromotionDAOImpl; //@Autowired PromotionDAO promotionDAOImpl; //other variables public CustomerOrder handleIncomingOrders(CustomerOrder customerOrder) { try { saveOrderDetails(customerOrder); ..... return customerOrder; } catch (Exception e) //TO-DO catch proper exception { //Send error response ....... return customerOrder; } } @Transactional public void saveOrderDetails(CustomerOrder customerOrder) throws Exception { customerOrderDAOImpl.create(customerOrder); .... while (promotionsIterator.hasNext()) { customerPromotion.setPromotionName(promotionDAOImpl.getName(customerOrder.getPromotionId)); customerPromotionDAOImpl.create(customerPromotion); } ...... while (customerItemIterator.hasNext()) { customerItemDAOImpl.create(customerItem); } } }
任何想法? 謝謝。
你能告訴我們一些代碼和調用服務方法的方式嗎?從服務內部還是從外部?或者你自己寫的任何嘗試? – 2013-04-23 10:49:38
您是否在交易定義中設置了傳播 – 2013-04-23 10:57:00
您是否在'autocommit'模式下建立了連接? – kan 2013-04-23 11:39:32