вызов нетранзакционного метода из транзакционных в Hibernate
Есть два @Transactional метода,оба из разных мест,но вызывают один и тот же метод,который не @Transactional и этот метод служит для выборки данных из бд(обычный select).Что произойдет,если два transactional метода одновременно вызовут метод для выборки,хочется знать какие могут быть последствия и есть ли связь с HibernateOptimisticLockingFailureException(Row was updated or deleted by another transaction)
Ответы (1 шт):
Аннотация @Transactional "накручивает" прокси (Dynamic Proxy) и выделяется в отдельный контекст. Таким образом, если 2 метода, помеченных аннотацией @Transactional вызовут метод без такой аннотации, будут созданы 2 отдельных контекста без взаимного влияния друг на друга. И результат их работы будет разным.
Контекст транзакции прокидывается по всему стеку вызовов, то есть распространяется и на методы, не помеченные аннотацией @Transactional, находящихся ниже в стеке вызовов.
По поводу HibernateOptimisticLockingFailureException связь есть и вам нужно понимать принципы работы реляционных баз данных и требования ACID.