У меня есть метод управления Spring для управления вставками базы данных. Он содержит несколько инструкций вставки.
@Transactional
public void insertObservation(ObservationWithData ob) throws SQLException
{
observationDao.insertObservation(ob.getObservation());
// aop pointcut inserted here in unit test
dataDao.insertData(ob.getData());
}
У меня есть два модульных теста, которые генерируют исключение перед вызовом второй вставки. Если исключение является RuntimeException, транзакция откатывается. Если исключением является SQLException, первая вставка сохраняется.
Я озадачен. Может ли кто-нибудь сказать мне, почему транзакция не откат на SQLException? Может ли кто-нибудь предложить предложение об управлении этим? Я мог поймать SQLException и бросить RuntimeException, но это просто кажется странным.