Spring Boot JPA - 没有类型的限定bean

时间:2016-05-28 15:33:55

标签: java spring spring-boot spring-data-jpa

我正在学习Spring,事情进展顺利,但突然遇到了无法找到合格bean的问题。即使在一个新的应用程序中,我也会碰壁。

如果您需要更多,请告诉我,请休息一下!我必须错过一些非常简单的事情。

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)}

我的依赖项:

<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>

联系班级:

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;

}

简单的界面:

package com.alco.repository;

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

import com.alco.entity.Contact;

public interface ContactRepository extends JpaRepository<Contact, String> {

}

3 个答案:

答案 0 :(得分:6)

我认为您缺少启用JPA存储库:

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

这适用于您的配置类。

答案 1 :(得分:0)

我唯一能看到的就是这个;请尝试使用存储库更改JpaRepository

import org.springframework.data.repository.Repository

public interface ContactRepository extends Repository<Contact, String> {

答案 2 :(得分:-1)

您需要使用@Repository注释您的存储库,否则Spring将无法管理您的存储库类。

请勿使用更通用的@Component,因为它可能导致不同的行为,例如在异常管理中。例如,请查看this parte of the Spring Documentation

摘录:

  

后处理器会自动查找所有异常转换器   (PersistenceExceptionTranslator接口的实现)和   建议所有标有@Repository注释的bean,以便   发现翻译人员可以拦截并应用适当的   关于抛出异常的翻译。

另外,正如前面提到的here,将来可能会出现后向兼容性问题。

作为替代方案,您可以使用@EnableJpaRepositories并指定Spring应该在哪里查找存储库。