2016-04-18 5 views
6

私はバネの注釈を使用してコントローラでリポジトリをautowireしようとしています。私は解決策を見つけることができなかったエラーorg.springframework.data.repository.query.QueryByExampleExecutor class not foundを取得しています。私は取得しています私は春にリポジトリをautowireできません

エラー:

SEVERE: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener 
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'articleController': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.payforeign.article.ArticleRepository com.payforeign.article.ArticleController.repository; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'articleRepository': Invocation of init method failed; nested exception is java.lang.NoClassDefFoundError: org/springframework/data/repository/query/QueryByExampleExecutor 

コントローラ私は@Repositoryでリポジトリを注釈を付けている

package com.payforeign.article; 

import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.stereotype.Controller; 
import org.springframework.web.bind.annotation.RequestMapping; 

@Controller 
@RequestMapping("/service") 
public class ArticleController { 

    @Autowired 
    private ArticleRepository repository; 

    //controller methods 
} 

リポジトリ。 Springのドキュメントによると、私はリポジトリインタフェースだけを持っています。それが正しいか?

package com.payforeign.article; 

import org.springframework.data.repository.CrudRepository; 
import org.springframework.stereotype.Repository; 

@Repository 
public interface ArticleRepository extends CrudRepository<Article, Long> {} 

applicationContext.xmlを

私は正しいbase-packagecomponent-scanjpa:repositoriesが含まれています。私はアノテーション駆動(<mvc:annotation-driven /> <tx:annotation-driven />)であり、JDBCとJPAの設定が追加されていると指定しました。私のapplicationContext.xmlを正しく

<context:annotation-config/> 
+1

スタックトレースがクリアです。CLASSPATHからSpring Data JARが欠落しています。 – duffymo

+2

'NoClassDefFoundError'はほとんど常にバージョンの不一致を意味します。このケースでは、例文を得るためにRC版(または少なくとも最新版のリリース版)が必要だと思います。 – chrylis

+1

私は 'spring-data-commons'をバージョン1.11.4から1.12.1にアップグレードし、問題を修正しました。ありがとう@chrylis – Black

答えて

7

あなたの問題は依存関係に関するものです。

クラス、あなたが探しているここにある:あなたが見ることができるように、春・データ-JPAの最新バージョンがそれを持っている https://github.com/spring-projects/spring-data-jpa/blob/master/src/main/java/org/springframework/data/jpa/repository/JpaRepository.java

、したがって、あなたは、最新のバージョンに失敗delendencyをアップグレードする必要がありますいずれか、またはspring-data-jpaのバージョンを少し下げます(推奨しません)。

私はspring bootとmongoDB jpaリポジトリで私のアプリケーションで同様の問題がありました。

例として、私は春-データ-JPAとバネのデータMongoDBの依存関係を持っている:

<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-data-jpa</artifactId> 
</dependency> 
<dependency> 
    <groupId>org.springframework.data</groupId> 
    <artifactId>spring-data-mongodb</artifactId> 
    <version>1.9.2.RELEASE</version> 
</dependency> 

しかし、春ブーツ春・ブート・スターター・データ-JPAは、暗黙のうちに、バネのデータの古いバージョンを使用しています-mongodbより1.9.2.RELEASE。 修正する最も簡単な方法は、spring-data-mongodbを1.8.4.RELEASEバージョンにダウングレードすることでした。

0

のweb.xmlからロードされる

<context:component-scan base-package="com.payforeign,com.payforeign.article" /> 

<context:component-scan base-package="com.payforeign" /> 

あなたがこれを使用して基本パッケージcom.payforeign.articleが自動的にスキャンされます。

+0

答えによると、[ 'は仕事をすることができます[http://stackoverflow.com/a/7456501/1997088] (http://stackoverflow.com/a/7456501/1997088) ''の注釈設定は必要ありません – Black

-3

を変更してくださいあなたのapplicationContext.xmlをして、この設定を追加しよう

<?xml version='1.0' encoding='UTF-8' ?> 
<beans ...> 
    <context:component-scan base-package="com.payforeign,com.payforeign.article" /> 
    <mvc:annotation-driven /> 
    <jpa:repositories base-package="com.payforeign.article" /> 

    <!-- Data Source --> 
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" > 
     <property name="driverClassName" value="com.mysql.jdbc.Driver" /> 
     <property name="url" value="jdbc:mysql://localhost/payforeign" /> 
     <property name="username" value="root" /> 
     <property name="password" value="" /> 
    </bean> 

    <!-- Hibernate --> 
    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
     <property name="dataSource" ref="dataSource" /> 
     <property name="packagesToScan" value="com.payforeign.article" /> 
     <property name="jpaVendorAdapter"> 
      <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> 
       <property name="showSql" value="true" /> 
       <property name="generateDdl" value="true" /> 
       <property name="database" value="MYSQL" /> 
      </bean> 
     </property> 
    </bean> 

    <!-- enable the configuration of transactional behavior based on annotations --> 
    <tx:annotation-driven /> 
    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> 
     <property name="entityManagerFactory" ref="entityManagerFactory" /> 
    </bean> 
</beans> 
-1

spring-data-commonsのバージョンがより古く、必要な場合はspring-data-jpaである場合、NoClassDefFoundErrorが発生することがあります。この例外は、ほとんど常にバージョンの不一致を意味します。ここでは、そのような不正な依存関係の組み合わせの一例です:

<dependency> 
    <groupId>org.springframework.data</groupId> 
    <artifactId>spring-data-commons</artifactId> 
    <version>1.6.2.RELEASE</version> 
</dependency> 

<dependency> 
    <groupId>org.springframework.data</groupId> 
    <artifactId>spring-data-jpa</artifactId> 
    <version>1.11.8.RELEASE</version> 
</dependency> 

ソリューションは、(とにかくあなたはそれがspring-data-jpaの推移依存だ原因明示的にこのライブラリを指定する必要はありません)、プロジェクトの依存関係からspring-data-commonsを削除するのと同じくらい簡単です。

関連する問題