У меня есть несколько классов, аннотированных в @TransactionalSpring + Hibernate несколько классов @Transactional находятся в одном сеансе?
К примеру у меня есть первый класс, который является весна Резольвер
<annotation-driven>
<mvc:argument-resolvers>
<beans:bean class="TestResolver" />
</mvc:argument-resolvers>
</annotation-driven>
класс
@Transactional
public class TestResolver implements HandlerMethodArgumentResolver {
@SuppressWarnings("unchecked")
public Object resolveArgument(MethodParameter parameter,
ModelAndViewContainer mavContainer, NativeWebRequest webRequest,
WebDataBinderFactory binderFactory) throws Exception {
return testDao.load(Test.class, 1L)
}
}
И я класс контроллера также аннотированный @Transactional
@Controller
@Transactional
@RequestMapping(value = "go")
public class TestController {
@RequestMapping...
public Test get() {
return testDao.load(Test.class, 1);
}
}
Проблема заключается в том, что каждый раз, когда я обращаюсь к testDao.load (Test.class, 1), hibernate выдает запрос в базу данных и не вытаскивает Test.class id = 1 из кеша в контроллере.
Почему он не использует кеш? эти два вызова происходят по одному запросу, но похоже на другой сеанс.
Если я в контроллере
testDao.load(Test.class, 1);
testDao.load(Test.class, 1);
второй раз он использует кэш, но не тогда, когда два разных componetns выполнения им код ..
Я только поставил @Transactional аннотации в свои службы. –
Hibernate не использует кеш (второго уровня), потому что вы его не настроили. – zeroflagL