简体   繁体   中英

Spring/ maven multi module project: NoUniqueBeanDefinitionException

I have a maven multi module project with Spring. I have a Core project that has all the data access beans along with entityManagerFactoryBean.

Now I have another maven module project that imports the context xml from the Core project's context xml file. I'm trying to override the entityManagerFactory bean by specifying this in the API Project :

 <beans:bean parent="entityManagerFactory">
    <beans:property name="packagesToScan">
        <beans:array>
            <beans:value>com.blah.data.domains</beans:value>
            <beans:value>com.blah.api.domains</beans:value>
        </beans:array>
    </beans:property>
</beans:bean>

This bean configuration is within the Core project :

  <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="persistenceUnitName" value="entityManager"/>
    <property name="packagesToScan" value="com.blah.data.domains" />
    <property name="jpaVendorAdapter">
        <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
            <property name="showSql" value="true" />
            <property name="generateDdl" value="true" />
            <property name="databasePlatform" value="org.hibernate.dialect.PostgreSQLDialect" />
        </bean>
    </property>
    <!-- put any ORM specific stuff here -->
    <property name="jpaProperties">
        <props>
            <prop key="hibernate.hbm2ddl.auto">none</prop>
        </props>
    </property>
</bean>

As you can see in the API project, all I'm adding com.blah.api.domains to the packagesToScan attribute. Problem is that I'm getting this issue:

 Caused by: org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type [javax.persistence.EntityManagerFactory] is defined: expected single matching bean but found 2: entityManagerFactory,entityManagerFactory$child#0

Don't try to override the entityManagerFactory in your API Module just put a wildcard in your Core Module to scan packages.

 <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="persistenceUnitName" value="entityManager"/>
    <property name="packagesToScan" value="com.blah.*.domains" />
    <property name="jpaVendorAdapter">
        <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
            <property name="showSql" value="true" />
            <property name="generateDdl" value="true" />
            <property name="databasePlatform" value="org.hibernate.dialect.PostgreSQLDialect" />
        </bean>
    </property>
    <!-- put any ORM specific stuff here -->
    <property name="jpaProperties">
        <props>
            <prop key="hibernate.hbm2ddl.auto">none</prop>
        </props>
    </property>
</bean>

With a com.blah.*.domains all domains will be scanned and loaded.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM