Spring boot 存储库上的奇Spring Boot@Autowired错误不是由于错误的项目结构或缺少注释造成的
我问这个问题有可能被标记为重复,但我真的不这么认为,所以就这样吧 我在运行基本的Spring启动应用程序时遇到问题。我得到的错误是: com.example.demo.service.EventService中构造函数的参数0需要找不到类型为“com.example.demo.dao.EventRepository”的bean 现在,这似乎是一个非常常见的错误(以及类似的问题),开发人员应该检查以下问题: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 现在,这似乎是一个非常常见的错误(以及类似的问题),开发人员应该检查以下问题: 大多数情况下,项目结构是错误的(或者说是“自定义”),并且由于层次结构[问题:,,可能还有
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
注释丢失了。@雅皮士:它没有丢失,我使用了一个从表生成实体的工具,所以它应该正确地创建它。但我会把它添加到问题中,以防其他人也感到疑惑。