Прежде всего, управление транзакциями должно осуществляться на уровне обслуживания, а не на уровне DAO, так как это приведет к значительному снижению производительности (для решения проблемы с соответствующим уровнем изоляции транзакций и распространением в каждом отдельном методе). Кроме того, объем единицы работы зависит от уровня обслуживания, а не от уровня доступа к данным: представьте себе выполнение бизнес-процесса, который должен работать с двумя или более DAO.
Существует много дискуссий в Интернете , что точки в этом направлении , как здесь , здесь и здесь .
В любом случае, поскольку это интервью, давайте примем вопрос как есть. С моей точки зрения, вы будете использовать @Transactional
аннотацию (или конфигурацию XML) в обоих методах и с распространением транзакции со REQUIRED
значением. Таким образом, когда любой из этих методов вызывается и если предыдущая транзакция не существует, будет создана новая транзакция:
@Transactional
class MyDAO {
@Transactional(propagation = REQUIRED)
public void foo() {
}
@Transactional(propagation = REQUIRED)
public void bar() {
}
}
foo()
иbar()
делить одну и ту же транзакцию, и если 1 не удастся, другой 1 также откатится? Можете ли вы дать некоторые разъяснения?