Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring Boot JPA-没有类型为的合格bean_Java_Spring_Spring Boot_Spring Data Jpa - Fatal编程技术网

Java Spring Boot JPA-没有类型为的合格bean

Java Spring Boot JPA-没有类型为的合格bean,java,spring,spring-boot,spring-data-jpa,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] fou

我正在学习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.alco.repository;

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

import com.alco.entity.Contact;

public interface ContactRepository extends JpaRepository<Contact, String> {

}
package com.alco.repository;
导入org.springframework.data.jpa.repository.JpaRepository;
导入com.alco.entity.Contact;
公共接口ContactRepository扩展了JpaRepository{
}

您需要使用
@repository
注释您的存储库,否则Spring将不会管理您的存储库类

不要使用更通用的
@组件
,因为它可能会导致不同的行为,例如在异常管理中。作为一个例子,请看

摘录:

后处理器会自动查找所有异常转换器 (PersistenceExceptionTranslator接口的实现)和 通知所有标记有@Repository注释的bean,以便 发现的转换器可以截取并应用适当的 在抛出的异常上进行转换

另外,如前所述,将来您可能会遇到背部兼容性问题


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

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

import org.springframework.data.repository.Repository

public interface ContactRepository extends Repository<Contact, String> {
import org.springframework.data.repository.repository
公共接口ContactRepository扩展了存储库{

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

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

这将用于您的配置类。

是作为应用程序的子包的
com.alco.repository
(带有
@SpringBootApplication
的主类?如果不是,它不会在那里拾取它。可能会添加
@EnableJpaRepositories(basePackages={“com.alco.repository”})
到您的主应用程序修复了该问题。不需要,任何示例(,)中都没有注释。生成的代码神奇地实现了这些接口,并且自动连接而不是接口,并使用
@Repository
等进行了正确的注释。这对于Spring数据JPA存储库接口不是必需的,仅对于Spring Bean(类),用作存储库层的一部分。我认为要么使用该注释,要么将EnableJpaRepositories放入具有适当属性的位置。Spring告诉您它找不到接口,所以请帮助它。这不是必需的。只需要启用JPA存储库。
@ComponentScan(basePackageClasses = ...)
@EntityScan(basePackageClasses = ...)
@EnableAutoConfiguration
@EnableJpaRepositories(basePackageClasses = ...)
public class ... {
}