2016-04-18 6 views
6

में रिपॉजिटरी को ऑटोवायर नहीं कर सकता हूं, मैं वसंत एनोटेशन का उपयोग कर नियंत्रक में भंडार को स्वत: निकालने की कोशिश कर रहा हूं। मुझे त्रुटि org.springframework.data.repository.query.QueryByExampleExecutor class not found मिल रही है जिसके लिए मुझे कोई समाधान नहीं मिला। कि मैं हो रही हैमैं वसंत

त्रुटि:

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 

नियंत्रक

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 
} 

भंडार

मैं @Repository साथ भंडार टिप्पणी किए गए। वसंत प्रलेखन के अनुसार मेरे पास केवल भंडार इंटरफ़ेस है। क्या यह सही है?

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-package और component-scan साथ jpa:repositories शामिल किया है। मैंने निर्दिष्ट किया है कि यह एनोटेशन संचालित है (<mvc:annotation-driven /> <tx:annotation-driven />) और जेडीबीसी और जेपीए सेटिंग्स को जोड़ा। मेरे applicationContext.xml सही ढंग से web.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

स्टैक ट्रेस स्पष्ट है: आप अपने क्लासस्पैट से स्प्रिंग डेटा जेएआर खो रहे हैं। – duffymo

+2

'NoClassDefFoundError' लगभग हमेशा एक संस्करण मेल नहीं खाता है। इस मामले में, मेरा मानना ​​है कि आपको प्रश्न-दर-उदाहरण प्राप्त करने के लिए आरसी संस्करणों (या कम से कम नवीनतम रिलीज संस्करण) की आवश्यकता है। – chrylis

+1

मैंने संस्करण 1.11.4 से 1.12.1 तक 'वसंत-डेटा-कॉमन्स' को अपग्रेड किया है और इसने समस्या को हल किया है। धन्यवाद @chrylis – Black

उत्तर

7

आपकी समस्या निर्भरताओं के बारे में है।

वर्ग, आप देख रहे हैं यहाँ है: https://github.com/spring-projects/spring-data-jpa/blob/master/src/main/java/org/springframework/data/jpa/repository/JpaRepository.java

आप देख सकते हैं, वसंत-डेटा-जेपीए के नवीनतम संस्करण यह है, इसलिए आप या तो अपने में नाकाम रहने के delendency नवीनतम संस्करण में नवीनीकृत या चाहिए डॉन्ड्रेडेड वसंत-डेटा-जेपीए संस्करण थोड़ा सा (अनुशंसित नहीं)।

मुझे वसंत बूट और मोंगोडीबी जेपीए रिपॉजिटरीज़ के साथ मेरे आवेदन में भी इसी तरह की समस्या थी।

उदाहरण के रूप में, मैं वसंत-डेटा-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> 

लेकिन वसंत बूट वसंत-बूट स्टार्टर-डेटा-जेपीए परोक्ष वसंत-डेटा के एक पुराने संस्करण का उपयोग करता है 1.9.2.RELEASE से -मोन्गोड। वसंत-डेटा-मोंगोडब को 1.8.4.RELEASE संस्करण में डाउनग्रेड करना सबसे आसान तरीका था।

0

कोशिश भरी हुई है अपने applicationContext.xml में इस config जोड़ने के लिए

<context:annotation-config/> 
+0

[http://stackoverflow.com/a/7456501/1997088 ](httpoverflow.com/a/7456501/1997088) पर उत्तर के अनुसार '<संदर्भ: घटक-स्कैन> 'नौकरी कर सकता है '<संदर्भ: एनोटेशन-कॉन्फ़िगर />' और एनोटेशन-कॉन्फ़िगरेशन की आवश्यकता नहीं है – Black

-3

कृपया बदलने

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

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

को

यह परिभाषित करता है इसका उपयोग कर आधार पैकेज com.payforeign.article स्वचालित रूप से स्कैन करेगा।

-1

का सामना कर सकते हैं यदि spring-data-commons का संस्करण पुराना है तो spring-data-jpa द्वारा आवश्यक है। यह अपवाद लगभग हमेशा एक संस्करण मेल नहीं खाता है।यहां इस तरह के एक बुरा निर्भरता संयोजन का एक उदाहरण है:

<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-commons को हटाने के रूप में सरल है (वैसे भी आप स्पष्ट रूप से इस पुस्तकालय को निर्दिष्ट करने के कारण यह spring-data-jpa की एक सकर्मक निर्भरता है की जरूरत नहीं है)।