У меня есть контекст гибернации

<context:property-placeholder location="/WEB-INF/spring.properties" />

    <!-- Enable annotation style of managing transactions -->
    <tx:annotation-driven transaction-manager="transactionManager" />   

    <!-- Declare the Hibernate SessionFactory for retrieving Hibernate sessions -->
    <!-- See http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/orm/hibernate3/annotation/AnnotationSessionFactoryBean.html -->                           
    <!-- See http://docs.jboss.org/hibernate/stable/core/api/index.html?org/hibernate/SessionFactory.html -->
    <!-- See http://docs.jboss.org/hibernate/stable/core/api/index.html?org/hibernate/Session.html -->
    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"
                 p:dataSource-ref="dataSource"
                 p:configLocation="${hibernate.config}"
                 p:packagesToScan="com.vaannila"/>

    <!-- Declare a datasource that has pooling capabilities-->   
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
                destroy-method="close"
                p:driverClass="${app.jdbc.driverClassName}"
                p:jdbcUrl="${app.jdbc.url}"
                p:user="${app.jdbc.username}"
                p:password="${app.jdbc.password}"
                p:acquireIncrement="5"
                p:idleConnectionTestPeriod="60"
                p:maxPoolSize="100"
                p:maxStatements="50"
                p:minPoolSize="10" />

    <!-- Declare a transaction manager-->
    <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager" 
                p:sessionFactory-ref="sessionFactory" />

</beans>

Теперь я хочу передать sessionFactory в свой конструктор DAO, как показано ниже.

<bean id="registrationDAO" class="com.vaannila.dao.RegistrationDAOimpl" >
     <constructor-arg ref="sessionFactory"/>
     </bean>

Но ошибка говорит, что bean sessionfactory не найден

Вызвано: org.springframework.beans.factory.BeanCreationException: ошибка при создании bean-компонента с именем «registrationDAO», определенным в ресурсе ServletContext [/WEB-INF/applicationContext.xml]: невозможно разрешить ссылку на bean-компонент «sessionFactory» при настройке аргумента конструктора; вложенным исключением является org.springframework.beans.factory.NoSuchBeanDefinitionException: в org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:328) не определен компонент с именем sessionFactory.

2
John 28 Мар 2011 в 08:27
1
Я уверен, что ошибка говорит больше, чем это. Что еще он говорит?
 – 
Sean Patrick Floyd
28 Мар 2011 в 08:57
Я думаю, это было очевидно, поскольку sessionfactory определен в другом xml-файле, а DAO находится в applicationContext, но я добавил ошибку tat
 – 
John
28 Мар 2011 в 10:04

1 ответ

Эта работа для меня

<bean id="hibernateSessionFactory"
                class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        <property name="configLocation">
            <value>classpath:/hibernate.cfg.xml</value>
        </property>
        <property name="dataSource" ref="dataSource">
        </property>
</bean>


<bean id="hibernateTransactionManager"
        class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <property name="sessionFactory" ref="hibernateSessionFactory" />
</bean>


<bean class="com.vaannila.dao.RegistrationDAOimpl"
        id="registrationDAO">
        <property name="sessionFactory">
            <ref bean="hibernateSessionFactory" />
        </property>
</bean>
2
Juan Rada 23 Фев 2012 в 17:14