2016-10-28 4 views
2
で@NoRepositoryBean BaseRepository applicationContext.xmlを

方法自動ワイヤBaseServiceImpl

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> 
    <property name="entityManagerFactory" ref="entityManagerFactory"/> 
    <property name="jpaDialect"> 
     <bean class="org.springframework.orm.jpa.vendor.HibernateJpaDialect" /> 
    </property> 
</bean> 

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
    <property name="dataSource" ref="dataSource" /> 
    <property name="packagesToScan" value="com.coderbike.entity, com.coderbike.core.entity"/> 
    <property name="jpaVendorAdapter"> 
     <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> 
      <property name="generateDdl" value="true" /> 
      <property name="showSql" value="false"/> 
      <property name="databasePlatform" value="org.hibernate.dialect.MySQLDialect"/> 
      <property name="database" value="MYSQL"/> 
     </bean> 
    </property> 
    <property name="jpaProperties"> 
     <props> 
      <prop key="hibernate.ejb.naming_strategy">org.hibernate.cfg.ImprovedNamingStrategy</prop> 
      <prop key="hibernate.show_sql">false</prop> 
      <prop key="hibernate.format_sql">false</prop> 
     </props> 
    </property> 
</bean> 

<!-- annotation transaction --> 
<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" /> 

<!-- scan repository package --> 
<jpa:repositories base-package="com.coderbike.dao.jpa, com.coderbike.core.repository" 
        repository-impl-postfix="Impl" 
        transaction-manager-ref="transactionManager" 
        entity-manager-factory-ref="entityManagerFactory" /> 

BaseRepository

@NoRepositoryBean 
public interface BaseRepository<T extends BaseEntity, ID extends Serializable> 
     extends JpaRepository<T, ID>, JpaSpecificationExecutor<T> { 

    T findByIdAndDeleteStatusFalse(ID id); 
} 

BaseServiceImpl

@Transactional(readOnly = true) 
public abstract class BaseServiceImpl<T extends BaseEntity, ID extends Serializable> implements BaseService<T, ID> { 

    @Autowired 
    protected BaseRepository<T, ID> baseRepository; 
} 

JPA構成に

開始Tomcatのエラーが

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.coderbike.core.repository.BaseRepository] found for dependency [com.coderbike.core.repository.BaseRepository<com.coderbike.entity.User, java.lang.Integer>]: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1406) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1057) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1019) 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:566) 
    ... 60 more 

をoccurrsネット上で長い時間を探しています。しかしmostpopularシナリオはそれがBaseRepositoryImplを作成して、木製のBaseRepositoryFactoryカスタマイズですJpaRepositoryFactoryを拡張します。だから、使用自動で上記のシナリオの代わりに有線ことができます。

答えて

0

これはthatthereは2利用可能なBaseRepository豆その依存関係を満たしていないことを意味します。 BaseRepositoryと春のため

使用注釈@Componentまたは@Repositoryはあなたのための作業を行います。 @NoRepositoryBeanの

1

コンセプトは、特定のリポジトリのインターフェースお二人の作成したプロキシインスタンスではありません。良い説明の氷hereがあります。

これは、2つの独自のこのBaseRepositoryインタフェースとprovidehと実装をoverextendものと想定されることを意味します。いったん終了したら、そのBeanをXMLで宣言します。

関連する問題