У меня есть 3 класса, AccountController, AccountManager и AccountDao (они вставляются друг в друга в этом порядке, то есть контроллер < - менеджер < - dao). Когда я добавляю аннотацию @Transactional в accountDao, у меня есть сеанс БД, и все работает нормально. когда я ставлю @Transactional на менеджера, он не работает. Я получаю:@Transactional аннотация не проксирует мой класс
org.hibernate.HibernateException: Could not obtain transaction-synchronized Session for current thread
Я вижу, что accountManager не является оболочкой с прокси-сервером по какой-либо причине (при отладке). Любые идеи, почему это происходит?
В XML моего контекста приложения у меня есть:
<context:component-scan base-package="com.mypackage" use-default-filters="true">
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
<tx:annotation-driven transaction-manager="hibernateTransactionManager" proxy-target-class="true"/>
На AccountManager я поставил следующие аннотации:
@Repository
@Transactional
public class AccountManager { ... }
И даже страннее вещь, AccountManager имеет 'DeviceManager' вводят в него , с теми же аннотациями, что и AccountManager, но DeviceManager действительно проксирован! Он полностью транзакционный.
Я использую org.springframework.transaction.annotation.Transactional аннотацию.
У меня нет каких-либо окончательных методов в AccountManager
Выстрел в темноте - вы используете тот же '@ Transactional'? Вы случайно не импортировали другую? – BretC
показать нам определение bean-файла 'hibernateTransactionManager', а также' 'AccountManager'' иметь какие-либо« финальные »методы? –
Я использую правильную аннотацию @Transactional, то же самое, что я использовал в AccountDao (org.springframework.transaction.annotation.Transactional) – Nir