Ich kann nicht autowire-repository im Frühjahr
Ich versuche autowire-repository im controller mit spring-annotation. Ich bin immer Fehler org.springframework.data.repository.query.QueryByExampleExecutor class not found
für die ich nicht finden konnte eine Lösung.
Fehler, die ich immer bin:
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
Controller
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
Habe ich kommentiert repository mit @Repository
. Nach Frühling Dokumentation, ich habe nur repository-Schnittstelle. Ist es richtig?
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
Ich habe jpa:repositories
mit der richtigen base-package
und component-scan
. Ich habe angegeben, dass es-annotation-driven (<mvc:annotation-driven /> <tx:annotation-driven />
) und fügte hinzu, JDBC und JPA-Einstellungen. Meine applicationContext.xml wird korrekt geladen 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>
- Der stack trace ist klar: Ihnen fehlt die Feder-Daten, die Gläser aus Ihrem KLASSENPFAD befinden.
NoClassDefFoundError
bedeutet fast immer einen Versionskonflikt. In diesem Fall, ich glaube, Sie brauchen die RC-Versionen (oder zumindest die neuesten release Versionen) zu bekommen, query-by-example.- Ich habe ein Upgrade
spring-data-commons
ab der version 1.11.4 zum 1.12.1 und es wurde das Problem behoben. Danke @chrylis
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihr Problem ist, über Abhängigkeiten.
Die Klasse, die du suchst ist hier:
https://github.com/spring-projects/spring-data-jpa/blob/master/src/main/java/org/springframework/data/jpa/repository/JpaRepository.java
Wie Sie sehen können, die neueste version des spring-data-jpa hat es, daher sollten Sie entweder aktualisieren Sie Ihren fehlerhaften delendency auf die neueste version oder downdrade spring-data-jpa-version ein wenig (nicht empfohlen).
Ich hatte ähnliches problem in meiner Anwendung mit spring boot und mongoDB jpa-repositories.
Als Beispiel, ich habe spring-data-jpa und spring-data-mongodb Abhängigkeiten:
Aber spring boot-spring-boot-starter-data-jpa verwendet implizit eine ältere version von spring-data-mongodb als 1.9.2.RELEASE.
Die einfachste Lösung war ein downgrade spring-data-mongodb auf 1.8.4.RELEASE-version.
Versuchen, fügen Sie diese Konfiguration in Ihrer applicationContext.xml
<context:component-scan>
tun können job<context:annotation-config/>
- und annotation-config ist dann nicht erforderlichAuftreten können
NoClassDefFoundError
wenn die version vonspring-data-commons
älter ist dann erforderlichspring-data-jpa
. Diese Ausnahme bedeutet fast immer einen Versionskonflikt. Hier ist ein Beispiel für so eine schlechte Abhängigkeit Kombination:Die Lösung ist so einfach wie das entfernen
spring-data-commons
aus Ihrem Projekt-Abhängigkeiten (trotzdem müssen Sie nicht explizit angeben müssen, diese Bibliothek, weil es eine transitive Abhängigkeit vonspring-data-jpa
).Ändern Sie bitte die
zu
Es ist definieren Sie das Basis-Paket mit diesem Sie com.payforeign.Artikel wird automatisch Scannen.