While doing loadtesting on our application I noticed that if you use @Transactional and @Cacheable annotions that hibernate always creates a database transaction. Is there an easy way to prevent this?
A more eleberate way to solve this within spring is to have following class/interfaces
- Servicelayer-interface
- Cacheable annotated class which is just a proxy/forward to
- Transactional annotation implentation class
What happens is the following
Call 1:
- Transaction gets created
- class method gets called
- result cached & returned
Call 2:
- Transaction gets created
- Cached result gets returned
The prefered result should be:
Call 1:
- Transaction gets created
- class method gets called
- result cached & returned
Call 2:
- Cached result gets returned
You need to change relative order of
@Transactionaland@Cacheableaspects.It can be configured using
orderattribute of<tx:annotation-driven>and<cache:annotation-driven>. See 8.2.4.7 Advice ordering for the meaning of order values.