Два ответа:
а) не делай этого. Используйте @Transactional
на уровне службы или на уровне дао, но не оба (уровень службы является обычным выбором, поскольку вам, вероятно, требуется одна транзакция на метод службы)
b) если вы это сделаете, то, что произойдет, зависит от атрибута propagation
аннотации @Transactional
и описано в этом разделе: 10.5.7 Распространение транзакции . В основном: PROPAGATION_REQUIRED
означает, что для обоих методов будет использоваться одна и та же транзакция, а PROPAGATION_REQUIRES_NEW
начинает новую транзакцию.
О ваших комментариях:
Конечно, я продолжал читать и понял, что, поскольку я использую прокси, этот второй метод не будет управляться транзакционным прокси, поэтому он похож на любой другой вызов метода.
Это не так в вашей ситуации (только если оба метода были в одном классе).
Если у компонента есть методы a
и b
, а a
вызывает b
, то b
вызывается для фактического метода, а не для прокси, потому что он вызывается из прокси ( бин не знает, что он находится во внешнем мире).
proxy bean
a() --> a()
|
V
b() --> b()
В вашей ситуации, однако, служба будет иметь внедренный объект dao, который будет представлять собой прокси-сервер, поэтому у вас будет такая ситуация:
proxy bean
service a() --> a()
|
/---------/
|
V
dao b() --> b()