Привет, есть требование, в котором я читаю один удар по файлу. Пример того, как файл выглядит
File.xls
id scode value1 value2 value3 ------ и так далее
0 acdss 12 6 14 ----- не исключение
1 acxx 0,14 5 12 ----- исключение - откат
2 cxsas 52,2 24 21 ---- без исключения
для каждой строки, я должен вставить / обновить данные в 3 разных таблицах после выполнения некоторой бизнес-логики
, поэтому моя вставка / обновление выполняется в цикле for и длякаждая строка.
Проблема в том, что при вставке / обновлении данных в базу данных возникает какая-либо исключительная ситуация для любой строки, я хочу откатить вставку из всех 3 таблиц для этой конкретной строки и продолжить вставку для остальной части строки.Как упоминалось в примере файла для идентификаторов 0 и 2, исключений не было, данные должны быть вставлены во все 3 таблицы, а для идентификатора 1 следует откатить всю вставку.Я использую jdbcTemplate для моей операции с БД. Ниже, если в примере кода, который я реализовал
class writer {
public void persistData() {
// code to read file and created object for each table
// size of file here is 3 so loop is running 3 times and table1Object
// and table2Object and table3Object has rows to be inserted into
// database table A,B,C
for (int i = 0; i < 3; i++) {
service.persistData(table1Object[i], table2Object[i], table3Oject[i]);
}
}
}
class service {
@Transactional(propagation = Propagation.REQUIRED_NEW, readOnly = false)
public void persistData(ob1,ob2,ob3){
dao.insertionOrUpadteForTableA(ob1);
dao.insertionOrUpadteForTableB(ob2);
dao.insertionOrUpadteForTableC(ob3);
}
}
с использованием этого подхода, вся транзакция получает откат, любой может подсказать мне, как этого добиться.