Spring 3 аннотации - HibernateDaoSupport - репозиторий требует фабрики сессии

Я получаю высказывание исключения:

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>

Таким образом, я не уверен, как дать репозиторию SessionFactory, которого он требует, в то время как он создает, это - аннотация управляемые бобы, я попытался сделать следующее:

 @Autowired
    protected HibernateTemplate createHibernateTemplate(SessionFactory sessionFactory) {
        return super.createHibernateTemplate(sessionFactory);
    }

Но это не решает проблему, вероятно, потому что репозиторию нужно то свойство при инстанцировании, не как раз в то самое время, когда выполнение действия. К сожалению, я не знаю, как обойти эту проблему, потому что нет никаких конструкторов или методов инициализации для переопределения с @Autowired аннотацией.

Я проверил, чтобы удостовериться, что sessionFactory боб создается и может быть Автосоединен проводом, и это прекрасно.

12
задан Rubens Mariuzzo 5 April 2011 в 01:17
поделиться

1 ответ

HibernateDaoSupport поставляется с SessionFactory через setSessionFactory(). Однако setSessionFactory() является final, поэтому вы не можете переопределить его, чтобы добавить аннотацию @Autowired. Но вы можете применить @Autowired к произвольному методу и вызвать setSessionFactory() из него:

@Autowired
public void init(SessionFactory factory) {
    setSessionFactory(factory);
}
36
ответ дан 2 December 2019 в 03:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: