Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.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
Spring boot 存储库上的奇Spring Boot@Autowired错误不是由于错误的项目结构或缺少注释造成的_Spring Boot_Spring Mvc_Spring Data Jpa - Fatal编程技术网

Spring boot 存储库上的奇Spring Boot@Autowired错误不是由于错误的项目结构或缺少注释造成的

Spring boot 存储库上的奇Spring Boot@Autowired错误不是由于错误的项目结构或缺少注释造成的,spring-boot,spring-mvc,spring-data-jpa,Spring Boot,Spring Mvc,Spring Data Jpa,我问这个问题有可能被标记为重复,但我真的不这么认为,所以就这样吧 我在运行基本的Spring启动应用程序时遇到问题。我得到的错误是: com.example.demo.service.EventService中构造函数的参数0需要找不到类型为“com.example.demo.dao.EventRepository”的bean 现在,这似乎是一个非常常见的错误(以及类似的问题),开发人员应该检查以下问题: 大多数情况下,项目结构是错误的(或者说是“自定义”),并且由于层次结构[问题:,,可能还有

我问这个问题有可能被标记为重复,但我真的不这么认为,所以就这样吧

我在运行基本的Spring启动应用程序时遇到问题。我得到的错误是:

com.example.demo.service.EventService中构造函数的参数0需要找不到类型为“com.example.demo.dao.EventRepository”的bean

现在,这似乎是一个非常常见的错误(以及类似的问题),开发人员应该检查以下问题:

  • 大多数情况下,项目结构是错误的(或者说是“自定义”),并且由于层次结构[问题:,,可能还有更多]的原因,bean没有被扫描。解决方案应该是将SpringBoot应用程序放在顶层包中,并将所有组件放在其子包中,这样它就可以正确地扫描所有内容,或者自定义需要扫描的包
  • 未定义bean,即缺少@Service、@Repository等类型的注释,因此未创建bean
  • 另一个原因可能是使用了两种不同的定义bean的方法(如前所述)。我使用的是纯注释样式定义,所以我认为我在这里应该很好 另外,这个问题的答案提到从
    application.properties
    文件中排除JPA存储库的自动配置,但我没有这个配置集

    还有几个问题/答案提到了依赖性问题和解决这个问题的
    pom.xml
    文件,但是我的
    pom.xml
    是一个非常基本的文件,它是由Spring Initializer创建的,所以我认为这不是解决方案

    错误消息还显示:

    考虑在配置中定义“com.example.demo.dao.EventRepository”类型的bean

    “缺少的bean”是此存储库:

    package com.example.demo.dao;
    导入com.example.demo.entity.Event;
    导入org.springframework.data.jpa.repository.JpaRepository;
    导入org.springframework.stereotype.Repository;
    @存储库
    公共接口事件存储库扩展了JpaRepository{
    }
    
    您可以看到它有@Repository注释(虽然我以前创建的存储库没有这个注释,而且运行良好,所以我认为这不是必需的,但我现在添加了它,以防出现问题),它扩展了JpaRepository,所以它应该是一个有效的存储库,并且它位于com.example.demo.dao包中

    自动连接此服务的类:

    package com.example.demo.service;
    导入com.example.demo.dao.EventRepository;
    导入org.springframework.beans.factory.annotation.Autowired;
    导入org.springframework.stereotype.Service;
    @服务
    公共类事件服务{
    事件库事件库;
    @自动连线
    公共事件服务(EventRepository EventRepository){
    this.eventRepository=eventRepository;
    }
    }
    
    我还将提供主应用程序,以便您可以看到它的包是com.example.demo,它是服务和存储库的父包:

    package com.example.demo;
    导入org.springframework.boot.SpringApplication;
    导入org.springframework.boot.autoconfigure.springboot应用程序;
    @SpringBoot应用程序
    公共类演示应用程序{
    公共静态void main(字符串[]args){
    run(DemoApplication.class,args);
    }
    }
    
    我也尝试过重建这个项目和IntelliJ臭名昭著的“关闭和重新打开”,因为在我的经验中,IntelliJ有时表现得很愚蠢,这可以解决问题,但这次不行

    另外,作为补充说明,我以前已经成功地创建了这类项目,所以我真的不确定现在的问题是什么

    我是不是漏掉了什么明显的东西?我还能查什么

    编辑:

    下面是实体类(由IDE工具生成):

    package com.example.demo.entity;
    导入javax.persistence.*;
    导入java.sql.Timestamp;
    导入java.util.Objects;
    @实体
    公开课活动{
    私有int-id;
    私有字符串名称;
    私有时间戳dateFrom;
    私有时间戳dateTo;
    //获取者和设置者摘要
    }
    
    结果证明这毕竟是pom.xml的问题

    我后来添加了JPA依赖项,但不小心添加了错误的依赖项。我的
    pom.xml
    had

    
    org.springframework.data
    spring数据jpa
    
    而不是

    
    org.springframework.boot
    spring引导启动器数据jpa
    
    显然,用于从表生成实体的IDE工具缺少
    javax.persistence
    ,因此它通过lib文件夹手动添加了jar。IntelliJ觉得一切都很好,但依赖项之间有些混乱


    无论如何,我更改了
    pom.xml
    中的依赖项,并删除了添加的额外jar。现在一切都正常了。

    您还可以显示
    com.example.demo.entity.Event
    类的定义吗?可能是
    @Entity
    注释丢失了。@雅皮士:它没有丢失,我使用了一个从表生成实体的工具,所以它应该正确地创建它。但我会把它添加到问题中,以防其他人也感到疑惑。