2016-03-23 4 views
0

У меня есть 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

+0

Выстрел в темноте - вы используете тот же '@ Transactional'? Вы случайно не импортировали другую? – BretC

+0

показать нам определение bean-файла 'hibernateTransactionManager', а также' 'AccountManager'' иметь какие-либо« финальные »методы? –

+0

Я использую правильную аннотацию @Transactional, то же самое, что я использовал в AccountDao (org.springframework.transaction.annotation.Transactional) – Nir

ответ

1

Я думаю, что вам нужно JTA @Transactional аннотацию. Используйте javax.transaction.Transactional вместо Hibernate's org.springframework.transaction.annotation.Transactional в вашем AccountManager хранилища.

документация знакомства в Spring Spring Transactional Annotation

+1

Я бы согласился с вами, если бы мои другие классы не были проксимированы. Но опять же, AccountDao отлично работает, когда я добавляю @Transactional на него – Nir

Смежные вопросы