2016-05-28 4 views
0

Ich lerne Frühling und die Dinge liefen gut, aber plötzlich in dieses Problem läuft, wo es keine qualifizierte Bean finden kann. Ich treffe die Wand, sogar in einer neuen App.Spring Boot JPA - Keine qualifizierende Bean vom Typ

Lassen Sie mich wissen, wenn Sie mehr brauchen, um eine Pause zu machen! Ich muss etwas sehr einfaches vermissen.

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: 
    No qualifying bean of type [com.alco.repository.ContactRepository] 
    found for dependency [com.alco.repository.ContactRepository]: 
    expected at least 1 bean which qualifies as autowire candidate for this dependency. 
    Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} 

Meine Abhängigkeiten:

<dependencies> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-data-jpa</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-data-rest</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-hateoas</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.projectlombok</groupId> 
     <artifactId>lombok</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-security</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-web</artifactId> 
    </dependency> 

    <dependency> 
     <groupId>com.h2database</groupId> 
     <artifactId>h2</artifactId> 
     <scope>runtime</scope> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-test</artifactId> 
     <scope>test</scope> 
    </dependency> 
</dependencies> 

Kontaktklasse:

package com.example.entity; 

import java.io.Serializable; 

import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 

import lombok.AllArgsConstructor; 
import lombok.Getter; 
import lombok.NoArgsConstructor; 
import lombok.Setter; 

@Entity 
@AllArgsConstructor 
@NoArgsConstructor 
@Getter 
@Setter 
public class Contact implements Serializable { 

private static final long serialVersionUID = -1340978779095092824L; 

@Id 
@GeneratedValue(strategy=GenerationType.AUTO) 
private String id; 
private String firstName; 
private String lastName; 
private String address; 
private String phoneNumber; 
private String email; 

} 

Die einfache Schnittstelle:

package com.alco.repository; 

import org.springframework.data.jpa.repository.JpaRepository; 

import com.alco.entity.Contact; 

public interface ContactRepository extends JpaRepository<Contact, String> { 

} 
+2

Ist 'com.alco.repository' als Unterpaket Ihrer App (Hauptklasse mit' @ SpringBootApplication'? Wenn nicht, wird es dort nicht abgeholt. Vielleicht '' EnableJpaRepositories (basePackages = {"com.alco. repository "})' zu Ihrer Haupt-App behebt das Problem. – zapl

Antwort

5

Ich glaube, Sie fehlt der JPA-Repositories ermöglichen:

@ComponentScan(basePackageClasses = ...) 
@EntityScan(basePackageClasses = ...) 
@EnableAutoConfiguration 
@EnableJpaRepositories(basePackageClasses = ...) 
public class ... { 
} 

Diese für Ihre Konfigurationsklasse sein würde.

-1

Sie benötigen Repository mit @Repository, andere mit Anmerkungen versehen weise Spring wird Ihre Repository-Klasse nicht verwalten.

Verwenden Sie nicht das generische @Component, da dies zu einem anderen Verhalten führen kann, z. in der Ausnahmenverwaltung. Schauen Sie sich zum Beispiel this parte of the Spring Documentation an.

Auszug:

Der Post-Prozessor automatisch für alle Ausnahme Übersetzer sieht (Implementierungen der PersistenceExceptionTranslator-Schnittstelle) und rät allen mit der @Repository Annotation markiert Bohnen, so dass die Übersetzer entdeckt kann das abfangen und anwenden entsprechende Übersetzung auf die geworfenen Ausnahmen.

Auch, wie erwähnt here, könnten Sie in Zukunft Probleme mit der Kompatibilität zurück haben.

Als Alternative können Sie @EnableJpaRepositories verwenden und angeben, wo Spring nach Repositories suchen soll.

+0

Sollte nicht notwendig sein, gibt es in keinem der Beispiele eine Anmerkung ([CityRepository.java] (https://github.com/spring-projects/spring- boots/blobs/master/spring-boot-samples/spring-boot-beispiel-daten-jpa/src/main/java/beispiel/daten/jpa/service/CityRepository.java), [boot jpa startanleitung] (https : //spring.io/guides/gs/accessing-data-jpa/)) .Der generierte Code, der diese Schnittstellen magisch implementiert und der anstelle der Schnittstelle autowired wird, ist korrekt mit '@ Repository' und so notiert. – zapl

+0

Dies ist nicht notwendig für Spring Data JPA Repository Schnittstellen, nur für Spring Beans (cl Asses), die als Teil einer Repository-Schicht verwendet werden. – dunni

+0

Ich denke, dass Sie entweder diese Annotation verwenden oder EnableJpaRepositories mit entsprechenden Attribut setzen. Spring sagt Ihnen, dass es die Schnittstelle nicht finden kann, also helfen Sie es. – Manu

0

Das einzige, was ich sehen kann, ist das; Bitte versuchen Sie es mit wechselnden JpaRepository mit Repository

import org.springframework.data.repository.Repository 

public interface ContactRepository extends Repository<Contact, String> {