У нас есть проблемы с откатом транзакций Spring, когда откат, похоже, не работает.
В моем методе уровня обслуживания, который аннотируется с помощью @Transactional
Я вызываю три разных класса DAOImpl
, чтобы вставить 3 записи.
Средняя вставка делает с 4-го стола, чтобы заполнить поле описания, но это не получилось. Я ожидаю, что первая вставка вернется, но похоже, что это не происходит.
Немного Очки:Весенняя транзакция не откат
- 'Получить' метод бросками со средой выполнения Exception
- Мы используем
org.springframework.jdbc.datasource.DataSourceTransactionManager
иMySQL datasource
, определенный вapplicationContext.xml
. Фасоль создаются вBeans.xml
, который импортируется вApplicationContext.xml
- Нет
@Transactional
аннотаций вDAO
слое - Мы использовали
<tx:annotation-driven transaction-manager="transactionManager"/>
снова вapplicationContext.xml
- Мы используем Spring 3.1
UPDATE:
Фрагменты кода ....
Service Class - это нечто похожее на то, что у меня есть .... Я тестировал с и без @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); } } }
Любая идея? Спасибо.
Можете ли вы показать нам какой-то код и способ вызова метода Сервиса? изнутри службы или извне? или любая попытка поймать, что вы написали сами? –
У вас есть набор для распространения в определении транзакции –
У вас есть ваше соединение в режиме autocommit? – kan