Сообщение Сколько транзакций и записей в БД будет? от 05.10.2023 11:11
Изменено 05.10.2023 11:14 Aleksei_Lekomtsev
Сколько транзакций и записей в БД будет?
@Component
public class Dao {
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void storeAll(List<Integer> list) throws Exception {
for (var i : list) {
store(i);
}
}
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void store(Integer i) throws Exception {
if (i == 3) {
throw new SQLException();
} else {
// добавить запись в таблицу
}
}
}Есть несколько предположений:
1 Будет 4 транзакции
2 Будет 0 записей, так как при срабатывании SQLException оно пробросится во внешнюю транзакцию(storeAll) и так как там оно не отлавливается, то внешняя транзакция(storeAll) сделает rollback
3 Будет 2 записи(1, 2), так как вложенная транзакция(store) при i == 3 не сделает rollback так как по умолчанию — The checked exception does not trigger a rollback of the transaction и внешняя транзакция (storeAll) тоже не сделает rollback по такой же причине
Сколько транзакций и записей в БД будет?
@Component
public class Dao {
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void storeAll(List<Integer> list) throws Exception {
for (var i : list) {
store(i);
}
}
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void store(Integer i) throws Exception {
if (i == 3) {
throw new SQLException();
} else {
// добавить запись в таблицу
}
}
}Есть несколько предположений:
1 Будет 4 транзакции
2 Будет 0 записей, так как при срабатывании SQLException оно пробросится во внешнюю транзакцию(storeAll) и так как там оно не отлавливается, то внешняя транзакция(storeAll) сделает rollback
3 Будет 2 записи(1, 2), так как вложенная транзакция(store) при i == 3 не сделает rollback так как по умолчанию — The checked exception does not trigger a rollback of the transaction и внешняя транзакция (storeAll) тоже не сделает rollback по такой же причине
П.C. Правильно я понимаю что для store нельзя использовать private модификатор, так как proxy объект(который создается из-за Transactional annotation) не сможет к этому методу обраться?(т.е. там не reflection?)