私は現在、spring-webmvc アプリを作成しています。数日前、最初の問題は、Hibernate と Spring でトランザクションを使用する方法がわからないことでした。これですべてが機能し、トランザクションマネージャーが稼働し、トランザクションを正常に処理できるようになりました。
これは私のJavaベースの春の設定の一部です:
@Configuration
@ComponentScan(basePackages = { "de.macomp.maipds" })
@EnableTransactionManagement
public class MainConfigLib {
...
@Bean
public HibernateTransactionManager transactionManager() {
HibernateTransactionManager manager = new HibernateTransactionManager(sessionFactory());
return manager;
}
}
したがって、サービス層または dao 層のメソッドをトランザクションで実行したい場合は、@Transactional でアノテーションを付けるだけで問題ありません。私の問題は、トランザクションでサービス メソッドを実行しないようにしたい場合、次のエラーが発生することです。
org.hibernate.HibernateException: No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here
これが発生するコードは次のようになります。
...
@Override
public Publisher findByName(String name) {
Session session = this.sessionFactory.getCurrentSession();
//bam!
...
どうにかして環境を「強制」して、「非トランザクション」セッションを提供することはできますか?! DAO の sessionFactory の transactionManager プロパティが null です。
@Transactional を「findByName」に追加すると問題は解決しますが、このメソッドではトランザクションは必要ありません...
何か案は?