Границы транзакции являются деталями реализации, поэтому они должны указываться реализацией, а не интерфейсом.
Например, представьте, что в некоторых сложных случаях вам необходимо использовать программное управление транзакциями (TransactionTemplate
) вместо @Transactional
для одного из ваших методов. Если у вас @Transactional
на уровне интерфейса, это будет невозможно.