Spring 数据 JPA - 找不到符合条件的依赖 bean

Spring data JPA - No qualifying bean found for dependency

我将用 spring data jpa 进行简单测试。

我有一个简单的 pojo、一个界面和一个 runner 应用程序。

这是我的代码:

package aa.bb.cc.repository;

@Repository
public interface ContentRepository extends CrudRepository<Content, Long>{
}

而且,我有一个简单的 POJO:

@Entity
@Table(name = "content")
public class Content {

public Content(String name, String title, String description) {
    this.name = name;
    this.title = title;
    this.description = description;
}

@NotNull
private String name;

@NotNull
private String title;

@NotNull
private String description;
...
}

并且,Application class:

package aa.bb.cc.repository;

@SpringBootApplication
public class Application {

    private static final Logger log = LoggerFactory.getLogger(Application.class);

    public static void main(String[] args) {
        SpringApplication.run(Application.class);
    }

    @Bean
    public CommandLineRunner demo(ContentRepository repository) {
        return (args) -> {
            // save two contents
            repository.save(new Content("name1", "title1", "description1"));

            // fetch all Contents
            log.info("Contents found with findAll():");

            for (Content eachContent : repository.findAll()) {
                log.info(eachContent.toString());
            }
            log.info("");
        };
    }
}

我的pom.xml:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <version>1.4.185</version>
</dependency>

我得到这个异常:

org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [aa.bb.cc.repository.ContentRepository] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}

我看到了一些相关问题,但无法解决这个问题。 解决方法是什么?

更新

spring-config.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jpa="http://www.springframework.org/schema/data/jpa"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/data/jpa
       http://www.springframework.org/schema/data/jpa/spring-jpa.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd">

    <jpa:repositories base-package="aa.bb.cc.repository"/>

    <context:annotation-config/>

</beans>

我建议阅读 official documentation,您需要在 spring 配置中激活存储库包,如下所示:

<repositories base-package="aa.bb.cc.repository" />

根据专家的回答你可以添加@Repository注解:

package aa.bb.cc.repository;

@Repository
public interface ContentRepository extends CrudRepository<Content, Long>{
}

好吧,您的示例在我的环境中工作,无需 xml 配置。我必须解决的两件事是:

  • 添加无参构造函数
  • 添加带有 @Id 注释的标识符字段 (@Id private Long id = 5l;)

如果您对此仍有疑问,我可以将其上传到我的 github 存储库和 post link 此处。

尝试将ContentRepositoryContentApplication放在同一个包中。如果您需要不同的包,请将 Application 注释为:

@EnableJpaRepositories("repository.package")
@EntityScan("entities.package")
@ComponentScan("other.components.package")