Combination hibernate @Transactional & ehcache @Cacheable always creates DB transaction

annotations, ehcache, hibernate, spring

Solution

You need to change relative order of `@Transactional` and `@Cacheable` aspects.

It can be configured using `order` attribute of `<tx:annotation-driven>` and `<cache:annotation-driven>`. See 8.2.4.7 Advice ordering for the meaning of order values.

Problem

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

Original source