Перш за все, управління транзакціями має здійснюватися на рівні обслуговування, а не на шарі DAO, оскільки це створить велику накладну ефективність (для вирішення відповідного рівня ізоляції транзакцій та їх розповсюдження при кожному різному методі). Також обсяг одиниці роботи надходить із сервісного рівня замість рівня доступу до даних: уявіть, що виконувати бізнес-процес, який повинен мати справу з 2 або більше DAO.
В Інтернеті багато дискусій, які вказують у тому напрямку, як тут , тут і тут .
У будь-якому випадку, оскільки це інтерв'ю, давайте приймемо питання таке, яке є. З моєї точки зору, ви б використовували @Transactional
анотацію (або конфігурацію XML) в обох методах та з поширенням транзакції зі REQUIRED
значенням. Таким чином, коли буде застосовано будь-який із цих методів і якщо немає попередньої транзакції, буде створено нову транзакцію:
@Transactional
class MyDAO {
@Transactional(propagation = REQUIRED)
public void foo() {
}
@Transactional(propagation = REQUIRED)
public void bar() {
}
}
foo()
іbar()
поділити ту саму транзакцію, і якщо 1 не вдасться, ще 1 також буде відкатати? Чи можете ви дати роз'яснення?