У меня следующий код объявления:
<tx:advice id="txAdvice" transaction-manager="TransactionManager">
<tx:attributes>
<tx:method name="Get"/>
<tx:method name="Update"/>
</tx:attributes>
</tx:advice>
Я вызываю методы "Get" и "Update" из функции "X".
Метод "Update" вызывает исключение "Другой объект"с тем же значением идентификатора уже был связан с сеансом "
Как закрыть сеанс во время Spring после выполнения метода?
Обновление информации:
Iпостараюсь более точно описать проблему.
У меня есть проект MVC.Контроллеры вызывают менеджеров (они представляют бизнес-логику).Менеджеры используют репозитории для взаимодействия с БД.При действии обновления я делаю следующее:
- вызов метода Get менеджера для получения учетной записи
- изменение некоторых свойств
- вызов метода обновления менеджера дляобновление этой учетной записи.
Каждая функция менеджера заключена в транзакцию AOP.Когда я вызываю метод Update, он пишет ошибку.Похоже, это потому, что объект Account все еще привязан к сеансу, который был открыт для функции Get.Я пытался открыть и закрыть сессию непосредственно в функции Get (без AOP).В этом случае все работает правильно.
Итак, вопрос в том, почему объект Account все еще прикрепляется к сеансу после вызова Get?
Имхо, вы не используете интерфейсы для вашего репо, а Spring не может создать декоратор AOP.
Я использую интерфейсы для менеджера.Я проверил откат транзакции.Это работает, так что я думаю, что AOP decorator - это сборка.