Когда у меня были похожие проблемы, это было из-за неправильной настройки транзакций, управляемых Spring. Дважды проверьте конфигурацию Spring tx.
<tx:annotation-driven transaction-manager="txManager"/>
<bean id="txManager" class="org.springframework.orm.hibernate.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
Тот факт, что вам нужно autocommit = false
, также может указывать на то, что вы не работаете в рамках транзакции. Вы также получаете ленивые исключения инициализации при попытке доступа к коллекциям «один ко многим»?
Самый прямой способ выяснить, действительно ли работает аспект Spring tx, - это использовать отладчик. Поместите точку останова в метод, который выдает FOR UPDATE
SQL. Поднимайтесь до тех пор, пока не достигнете своего @Transactional
класса / метода. Вы должны увидеть прокси аспекта Spring при следующем вызове в стеке вызовов.