【问题标题】:UnsatisfiedDependencyException: Error creating bean with name 'procjectController': Unsatisfied dependency expressed through fieldUnsatisfiedDependencyException:创建名为 'procjectController' 的 bean 时出错:通过字段表示不满足的依赖关系
【发布时间】:2020-04-04 22:35:51
【问题描述】:

我正在使用 spring JAP 建立简单的多对一关系。我得到 UnsatisfiedDependencyException Error with bean name Unsatisfied dependency express through field

UnsatisfiedDependencyException:创建名为“procjectController”的 bean 时出错:不满意

这是我的文件。

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();
    }

}

ProcjectController.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);
    }
}

【问题讨论】:

  • 需要完整的堆栈跟踪。堆栈跟踪的最后通常描述了失败的原因。

标签: java hibernate spring-boot spring-mvc spring-data-jpa


【解决方案1】:

注意:此答案基于数据不足,因为堆栈跟踪不可用。通过正确和完整的堆栈跟踪,我们也许能够提供更准确的答案。

答案: 看起来你的 Dao 类有问题。

你写了

@Repository
public interface ProjectDao extends JpaRepository<Project, Integer> {

    List<Project> findEmployeeById(int eId);

}

这意味着您正在创建Project 类型的存储库并尝试以findEmployeeById 触发查询,它应该是findByEmployee,它接受Employee 作为参数,或者不应该在那里一点也不。因为查询语法和模板参数不匹配。所以 Spring 将无法为它初始化查询处理程序。

如果满足您的目的,请尝试如下更改。 @Repository 公共接口 ProjectDao 扩展 JpaRepository {

    List<Project> findAllByEmployee(Employee emp);

}

请检查相同,并正确。如果它仍然不起作用,请发布完整的堆栈跟踪,我们可以为您提供帮助。

【讨论】:

  • 谢谢@Anand Vaidya
猜你喜欢
  • 2020-07-26
  • 2017-05-24
  • 2020-05-03
  • 2021-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-25
  • 2019-02-22
相关资源
最近更新 更多