我正在使用 spring JAP 构建简单的多对一关系。我收到 UnsatisfiedDependencyException 错误,bean 名称未满足通过字段表达的依赖关系
UnsatisfiedDependencyException: Error creating bean with name 'procjectController': Unsatisfied
这是我的文件。
project.java
package com.ganesh.dto;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import com.fasterxml.jackson.annotation.JsonIgnore;
@Entity
public class Project {
@Id
private int projectId;
private String projectName;
//Relation establish
@ManyToOne(
fetch = FetchType.LAZY,
optional = false
)
@JoinColumn(
name = "employee_id",
nullable = false
)
@JsonIgnore
private Employee employee;
public Project() {
}
public Project(int projectId, String projectName, int eId) {
super();
this.projectId = projectId;
this.projectName = projectName;
//Adding employee
this.employee = new Employee(eId,"","");
}
public int getProjectId() {
return projectId;
}
public void setProjectId(int projectId) {
this.projectId = projectId;
}
public String getProjectName() {
return projectName;
}
public void setProjectName(String projectName) {
this.projectName = projectName;
}
//Adding getter and setters Employee reference
public Employee getEmployee() {
return employee;
}
public void setEmployee(Employee employee) {
this.employee = employee;
}
}
ProjectDao.java
package com.ganesh.dao;
import java.util.List;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import com.ganesh.dto.Project;
@Repository
public interface ProjectDao extends JpaRepository<Project, Integer> {
List<Project> findEmployeeById(int eId);
}
ImpProjectService.java
package com.ganesh.service;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ganesh.dao.*;
import com.ganesh.dto.Project;
@Service
public class ImpProjectService implements ProjectService {
@Autowired
private ProjectDao projectDao;
@Override
public List<Project> getProjectList(int eId) {
System.out.println("in Dao class employee id"+ eId);
return projectDao.findEmployeeById(eId);
}
@Override
public Project getProjectById(int id) {
return projectDao.getOne(id);
}
@Override
public void addProject(Project project) {
projectDao.save(project);
}
@Override
public void updateProject(Project project) {
projectDao.save(project);
}
@Override
public void deleteProjectById(int id) {
projectDao.deleteById(id);
}
@Override
public List<Project> getAllProject() {
return projectDao.findAll();
}
}
ProjectController.java
package com.ganesh.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
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;
import com.ganesh.dto.*;
import com.ganesh.service.*;
@RestController
public class ProcjectController {
@Autowired
private ImpProjectService projectService;
@RequestMapping("/projects")
public List<Project> getProjectList(){
return projectService.getAllProject();
}
@RequestMapping("/employees/{eId}/projects")
public List<Project> getAllProjects(@PathVariable int eId){
System.out.println("In Project Controller");
List<Project> projList = projectService.getProjectList(eId);
System.out.println(projList);
return projList;
}
@RequestMapping("/employees/{eId}/projects/{id}")
public Project getProjectById(@PathVariable int id) {
return projectService.getProjectById(id);
}
@RequestMapping(method = RequestMethod.POST, value="/employees/{eId}/projects")
public void addProject(@RequestBody Project project, @PathVariable int eId) {
project.setEmployee(new Employee(eId,"",""));
projectService.addProject(project);
}
@RequestMapping(method = RequestMethod.PUT, value="/employees/{eId}/projects/{id}")
public void updateProject(@RequestBody Project project, @PathVariable int eId) {
project.setEmployee(new Employee(eId,"",""));
projectService.updateProject(project);
}
@RequestMapping(method = RequestMethod.DELETE, value="/projects/{id}")
public void deleteProjecstById(@PathVariable int id) {
projectService.deleteProjectById(id);
}
}
最佳答案
注意:此答案基于不充分的数据,因为堆栈跟踪不可用。有了正确且完整的堆栈跟踪,我们也许能够提供更精确的答案。
答案: 看起来像是您的 Dao 类中的问题。
你已经写了
@Repository
public interface ProjectDao extends JpaRepository<Project, Integer> {
List<Project> findEmployeeById(int eId);
}
这意味着您正在创建 Project
类型的存储库并尝试以 findEmployeeById
形式触发查询,它应该是 findByEmployee
,其中接受 Employee 作为参数,或者根本不应该存在。因为查询语法和模板参数不匹配。因此 Spring 将无法为其初始化查询处理程序。
如果满足您的目的,请尝试按如下方式进行更改。 @存储库 公共(public)接口(interface) ProjectDao 扩展 JpaRepository {
List<Project> findAllByEmployee(Employee emp);
}
请检查相同并更正。如果仍然不起作用,请发布完整的堆栈跟踪,我们可以帮助您。
关于java - 不满意的依赖异常 : Error creating bean with name 'procjectController' : Unsatisfied dependency expressed through field,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59289283/