SpringBoot启动报错UnsatisfiedDependencyException:Recruiter非托管类型
SpringBoot启动报错:Not a managed type
错误信息
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'recruiterController': Unsatisfied dependency expressed through field 'recruiterService': Error creating bean with name 'recruiterService': Unsatisfied dependency expressed through field 'recruiterRepo': Error creating bean with name 'recruiterRepo' defined in com.jobapplication.recruiterservice.repository.RecruiterRepo defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration: Not a managed type: class com.jobapplication.recruiterservice.model.Recruiter
代码文件
Recruiter.java
package com.jobapplication.recruiterservice.model; import javax.persistence.*; import java.util.UUID; @Entity public class Recruiter { @Id @GeneratedValue(strategy= GenerationType.IDENTITY) private int id; @Column(name = "name") private String name; @Column(name="email") private String email; @Column(name="uuid") private String uuid; public Recruiter(int id, String name, String email, String uuid) { this.id = id; this.name = name; this.email = email; this.uuid = UUID.randomUUID().toString(); } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getUuid() { return uuid; } public void setUuid(String uuid) { this.uuid = uuid; } }
RecruiterController.java
package com.jobapplication.recruiterservice.controller; import com.jobapplication.recruiterservice.model.Recruiter; import com.jobapplication.recruiterservice.service.RecruiterService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; @RestController public class RecruiterController { @Autowired RecruiterService recruiterService; // 添加招聘人员接口 @RequestMapping(method = RequestMethod.POST, value="recruiter/addRecruiter") public void addRecruiter(@RequestBody Recruiter recruiter){ recruiterService.addRecruiter(recruiter); } }
RecruiterRepo.java
package com.jobapplication.recruiterservice.repository; import com.jobapplication.recruiterservice.model.Recruiter; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; @Repository public interface RecruiterRepo extends JpaRepository<Recruiter, String> { }
RecruiterService.java
package com.jobapplication.recruiterservice.service; import com.jobapplication.recruiterservice.model.Recruiter; import com.jobapplication.recruiterservice.repository.RecruiterRepo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class RecruiterService { @Autowired RecruiterRepo recruiterRepo; public void addRecruiter(Recruiter recruiter) { recruiterRepo.save(recruiter); } }
RecruiterServiceApplication.java
package com.jobapplication.recruiterservice; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class RecruiterServiceApplication { public static void main(String[] args) { SpringApplication.run(RecruiterServiceApplication.class, args); } }
问题分析与修复方案
1. 实体类缺少无参构造函数
JPA要求实体类必须提供公共无参构造函数,否则无法通过反射实例化对象。当前Recruiter只有带参构造,需补充无参构造:
public Recruiter() { // JPA所需的无参构造 }
同时可以优化带参构造的uuid赋值逻辑,避免传入的uuid被强制覆盖:
public Recruiter(int id, String name, String email, String uuid) { this.id = id; this.name = name; this.email = email; this.uuid = (uuid == null || uuid.isEmpty()) ? UUID.randomUUID().toString() : uuid; }
2. JPA仓库ID类型不匹配
Recruiter的主键id是int类型,但RecruiterRepo继承JpaRepository时指定的ID类型是String,类型不匹配导致JPA无法识别实体类。需将仓库的ID类型改为Integer(推荐用包装类):
@Repository public interface RecruiterRepo extends JpaRepository<Recruiter, Integer> { }
3. 验证包扫描范围(可选)
@SpringBootApplication默认扫描主类所在包及其子包,当前代码结构已符合要求。如果修复后仍有问题,可显式指定扫描范围:
@SpringBootApplication @EntityScan(basePackages = "com.jobapplication.recruiterservice.model") @EnableJpaRepositories(basePackages = "com.jobapplication.recruiterservice.repository") public class RecruiterServiceApplication { // ... }
内容的提问来源于stack exchange,提问作者Akshay Chikkalki
相关产品推荐
相关产品推荐

