вызов нетранзакционного метода из транзакционных в Hibernate

Есть два @Transactional метода,оба из разных мест,но вызывают один и тот же метод,который не @Transactional и этот метод служит для выборки данных из бд(обычный select).Что произойдет,если два transactional метода одновременно вызовут метод для выборки,хочется знать какие могут быть последствия и есть ли связь с HibernateOptimisticLockingFailureException(Row was updated or deleted by another transaction)


Ответы (1 шт):

Автор решения: DmitryD

Аннотация @Transactional "накручивает" прокси (Dynamic Proxy) и выделяется в отдельный контекст. Таким образом, если 2 метода, помеченных аннотацией @Transactional вызовут метод без такой аннотации, будут созданы 2 отдельных контекста без взаимного влияния друг на друга. И результат их работы будет разным.

Контекст транзакции прокидывается по всему стеку вызовов, то есть распространяется и на методы, не помеченные аннотацией @Transactional, находящихся ниже в стеке вызовов.

По поводу HibernateOptimisticLockingFailureException связь есть и вам нужно понимать принципы работы реляционных баз данных и требования ACID.

→ Ссылка