@Transactional не работает, тогда как DefaultTransactionDefinition работает - PullRequest
0 голосов
/ 16 ноября 2018

Я обновляю свое приложение с Spring3 до Spring 4. В моем существующем приложении мы использовали OpenSessionInViewInterceptor, который создает транзакцию вместе с новым запросом. Теперь я также использую JPA, поэтому, даже если я использую OpenEntityManagerInViewInterceptor, он не связывает транзакции с ним. Поэтому мне пришлось вручную вводить транзакцию во всех моих методах контроллера.

Из-за унаследованного кода классы контроллеров имеют много бизнес-логики вместо того, чтобы правильно распределить ее по уровню обслуживания. Теперь, если я добавлю аннотацию @Transctional в метод контроллера, тогда он не будет работать, тогда как если я использую транзакцию вручную через DefaultTransactionDefinition, то она будет работать правильно. Кроме того, если я удаляю бизнес-логику методов контроллера для уровня обслуживания и помещаю аннотацию @Transactional в уровень обслуживания, то она также работает нормально. Но эти изменения утомительны, и мое приложение очень большое, поэтому не могу этого сделать. Пожалуйста, дайте мне знать, почему @Transactional не работает в моем случае, если я вставлю его в контроллер, как мне заставить его работать. Я не использую AspectJ для управления транзакциями.

Испытанные подходы:

  1. Код в обоих местах: код в dispatcher-servlet.xml вместе с appliacationContext.xml, но все равно транзакции контроллера терпят неудачу.
  2. Перемещен bean-компонент для urlMapping в applicationContext.xml, но все равно он не работает.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...