Почему методы, аннотированные @Transactional, должны быть переопределенными

У меня есть следующий код:

/**
 * Restored deleted partner
 */
@Transactional
public void restorePartnerById(Integer id){
    // logic      
}

Когда я делаю метод окончательным

/**
 * Restored deleted partner
 */
@Transactional
public final void restorePartnerById(Integer id){
    // logic      
}

Я получаю сообщение об ошибке компиляции:

Методы с комментариями @Transactional должно быть переопределено

Я начал копаться, но не могу понять причину, по которой он должен быть переопределен. Почему метод должен быть переопределен?

2 ответа

Решение

Spring Transactional работает с созданием прокси-класса, который переопределяет методы:

создайте транзакционный прокси вокруг объекта, который создается из определения bean-компонента fooService. Прокси-сервер будет сконфигурирован с указанием транзакций, поэтому при вызове соответствующего метода на прокси-сервере

Я думаю, что изменение метода на финал не имеет отношения к @Trasacational смотрите эту ссылку, как @Trasactional будет работать http://www.codingpedia.org/jhadesdev/how-does-spring-transactional-really-work/

Другие вопросы по тегам