次のような例外が発生します。
java.lang.IllegalArgumentException: 'sessionFactory' または 'hibernateTemplate' が必要です
@Repository
HibernateDaoSupport クラスでアノテーションを使用しようとしたとき。エラー メッセージは簡単です。リポジトリを作成するには、sessionFactory が必要です。ただし、XML でセッション ファクトリを定義しました。
<!-- Hibernate -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="dashDataSource" />
<property name="annotatedClasses">
<list>
<value>com.mycomp.myapp.Category</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
</props>
</property>
</bean>
そのため、アノテーション駆動型 Bean の作成中に必要な SessionFactory をリポジトリに与える方法がわかりません。次のことを試みました。
@Autowired
protected HibernateTemplate createHibernateTemplate(SessionFactory sessionFactory) {
return super.createHibernateTemplate(sessionFactory);
}
しかし、これは問題を解決しません。これは、アクションを実行するときだけでなく、インスタンス化中にリポジトリがそのプロパティを必要とするためと考えられます。残念ながら、@Autowired アノテーションでオーバーライドするコンストラクターや初期化メソッドがないため、この問題を回避する方法がわかりません。
sessionFactory Bean が作成され、Autowired できることを確認しましたが、問題ありません。