Ganesh Kumar
Ganesh Kumar

Reputation: 99

UnsatisfiedDependencyException: Error creating bean with name 'procjectController': Unsatisfied dependency expressed through field

I am building simple ManyToOne relationship using spring JAP. i get UnsatisfiedDependencyException Error with bean name Unsatisfied dependency expressed through field

UnsatisfiedDependencyException: Error creating bean with name 'procjectController': Unsatisfied

Here is my file.

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

Upvotes: 0

Views: 446

Answers (1)

Anand Vaidya
Anand Vaidya

Reputation: 1461

Note: This answer is based on insufficient data, because stack trace is not available. With correct and complete stacktrace, we might be able to provide more precise answer.

Answer: Looks like a problem in your Dao class.

You have written

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

    List<Project> findEmployeeById(int eId);

}

Which means you are creating a repository of type Project and trying to fire a query as findEmployeeById, It should either be findByEmployee, which accepts Employee as a parameter, or should not be there in place at all. Because the query syntax and the Template parameters do not match. So Spring will not be able to initialize the query handlers for the same.

Try changing it as below, if is satisfies your purpose. @Repository public interface ProjectDao extends JpaRepository {

    List<Project> findAllByEmployee(Employee emp);

}

Please check the same, and correct. If it still doesn't work, please post the full stack trace, and we can help you out.

Upvotes: 1

Related Questions