10

I have the following code:

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

When I make the method final

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

I get a compilation error stating:

Methods annotated with @Transactional must be overridable

I went digging around but I cannot get the reason why it must be override able, Why must the method be override able?

Ori Marko
  • 56,308
  • 23
  • 131
  • 233
Christiaan
  • 639
  • 1
  • 8
  • 18

2 Answers2

11

Spring's Transactional works with creating a proxy class that override methods:

create a transactional proxy around the object that is created from the fooService bean definition. The proxy will be configured with the transactional advice, so that when an appropriate method is invoked on the proxy

Ori Marko
  • 56,308
  • 23
  • 131
  • 233
1

I think changing a method to final is not relevant to @Trasacational ,see this link how the @Trasactional will work http://www.codingpedia.org/jhadesdev/how-does-spring-transactional-really-work/

Mahender Ambala
  • 363
  • 3
  • 18