【问题标题】:Spring Boot JPA - No qualifying bean of typeSpring Boot JPA - 没有符合条件的 bean 类型
【发布时间】:2016-05-28 15:33:54
【问题描述】:

我正在学习 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> {

}

【问题讨论】:

  • com.alco.repository 作为你的应用程序的子包(主类带有@SpringBootApplication?如果不是,它不会在那里捡起它。也许将@EnableJpaRepositories(basePackages = {"com.alco.repository"}) 添加到你的主应用程序可以解决问题。

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


【解决方案1】:

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

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

这将用于您的配置类。

【讨论】:

    【解决方案2】:

    我唯一能看到的是这个;请尝试使用 Repository 更改 JpaRepository

    import org.springframework.data.repository.Repository
    
    public interface ContactRepository extends Repository<Contact, String> {
    

    【讨论】:

      【解决方案3】:

      你需要用@Repository注解你的仓库,否则Spring不会管理你的Repository类。

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

      摘录:

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

      另外,正如here 所述,将来您可能会遇到向后兼容性问题。

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

      【讨论】:

      • 不应该,任何示例中都没有注释(CityRepository.javaboot jpa getting started guide)。生成的代码神奇地实现了这些接口,并且自动装配而不是接口,并用@Repository 等正确注释。
      • 这对于 Spring Data JPA 存储库接口不是必需的,仅适用于用作存储库层的一部分的 Spring Beans(类)。
      • 我认为要么使用该注释,要么将 EnableJpaRepositories 放入适当的属性。 Spring 告诉你它找不到接口,所以帮助它。
      • 这不是必需的。唯一需要的是启用 JPA 存储库。
      猜你喜欢
      • 2014-01-15
      • 1970-01-01
      • 2014-09-24
      • 2021-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-04
      相关资源
      最近更新 更多