私はAccountController、AccountManager、AccountDaoの3つのクラスを持っています(コントローラ< - マネージャ< - daoの順番で互いに注入されています)。 accountDaoに@Transactionalアノテーションを置くと、DBセッションがあり、すべて正常に動作します。 @Transactionalをマネージャに置くと、動作しません。私は得る:@トランザクションの注釈は私のクラスを代理しません
org.hibernate.HibernateException: Could not obtain transaction-synchronized Session for current thread
私はaccountManagerが(何らかの理由で)プロキシを持つラッパーではないことがわかります(デバッグ時)。これがどうして起こるのか?私は自分のアプリケーションコンテキストのXMLで
:AccountManagerをオン
<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"/>
私は、次の注釈入れる:
@Repository
@Transactional
public class AccountManager { ... }
をとにも奇妙なことがあり、AccountManagerをは「デバイス・マネージャ」は、それに注入しましたAccountManagerと同じ注釈が付いていますが、DeviceManagerはプロキシされています!それは完全にトランザクションです。
私はorg.springframework.transaction.annotation.Transactionalアノテーションを使用しています。
私は私はあなたがJTA @Transactional
注釈が必要だと思うのAccountManager
暗いところで撮影 - 同じ '@ Transactional'を使用していますか?あなたは偶然に別のものを輸入しなかったのですか? – BretC
は、 'hibernateTransactionManager' Bean定義を示してくれますし、' AccountManager'はいつでも 'final'メソッドを持っていますか? –
私はAccountDao(org.springframework.transaction.annotation.Transactional)で使用したのと同じ@Transactionalアノテーションを使用しています。 – Nir