как написать sql запрос в весенней загрузке с таблицей присоединений? - PullRequest
0 голосов
/ 12 июня 2019

Я не могу заставить мой sql-запрос работать, я думаю, что проблема связана с "AssignmentServiceImpl.java"

У меня есть 2 таблицы (проект и участник), одна из которых - объединение (назначение).

... идея, пожалуйста? вот мой код:

AppController:

``

@Controller
public class AppController {
    @Autowired
    private AssignmentService assignmentService;    
    @GetMapping({"/listAssignments"})
    public String listAssignment(ModelMap model) { 
        List<Assignment> assignments = assignmentService.fetchAllAssignments();
        model.addAttribute("assignments", assignments);
        return "allAssignments";
    }

``

Назначение DAO: ``

@Repository
public interface AssignmentDao extends CrudRepository<Assignment, Integer> {        
//Permet d'afficher la liste des assignments
@Query("select project.PROJECT_NAME, contributor.FIRST_NAME, assignment.START_DATE, assignment.END_DATE" +
        " from project inner join assignment on assignment.id_ASSIGNMENT=project.ID_PROJECT " +
                "inner join contributor on contributor.id=assignment.id_ASSIGNMENT")
        List<Assignment> fetchAllAssignments();
}

``

Служба назначения:

``

public interface AssignmentService {
    List<Assignment> fetchAllAssignments(); 
}

``

AssignmentServiceImpl:

``

@Service("assignmentService")
public class AssignmentServiceImpl implements AssignmentService {   
    @Autowired
    private AssignmentDao dao;  
    public List<Assignment> fetchAllAssignments() {
        return dao.fetchAllAssignments();
    }
}

``

Назначение:

``

@Entity
@Table(name="ASSIGNMENT")
public class Assignment {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id_ASSIGNMENT", nullable = false)
    private int id; 



    @ManyToOne
    private Project project;


    @ManyToOne
    private Contributor contributor;



    get and set

    @Override
    public String toString() {
        return "Assignment [startDate=" + startDate + ", endDate=" + endDate + ", assignmentRate="
                + assignmentRate + ", activity=" + activity + "]";
    }

``

Проект:

``

@Entity
@Table(name="PROJECT")
public class Project {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "ID_PROJECT", nullable = false)
    private int idProject;


    @Size(min=3, max=45)
    @Column(name = "PROJECT_NAME", nullable = false)
    private String projectName;

    @OneToMany(mappedBy="project", fetch = FetchType.LAZY)
    private List<Assignment> assignments;

    get and set ...

    @Override
    public String toString() {
        return"Project{" + ", idProject='" + idProject + '\'' +
                ", pilotBusinessNumber='" + pilotBusinessNumber + '\'' +
                ", customer='" + customer + '\'' +
                ", projectName='" + projectName + '}';
    }


}

``

Автор:

``

@Entity
@Table(name="CONTRIBUTOR")
public class Contributor {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id", nullable = false)
    private int id;
    ...     
    @Size(min=3, max=50)
    @Column(name = "FIRST_NAME", nullable = false)
    private String firstName;

    ...

    @OneToMany(mappedBy="contributor", fetch = FetchType.LAZY)
    private List<Assignment> assignments;

    get and set ...


    @Override
    public String toString() {
        return"Contributor{" + ", id='" + id + '\'' +
                ", name='" + name + '\'' +
                ", firstName='" + firstName + '\'' +
                ", login='" + login + '\'' +
                ", bu='" + bu + '\'' +
                ", agencyBu='" + agencyBu + '\'' +
                ", team='" + team + '\'' +
                ", managerName='" + managerName + '\'' +
                ", geographicAxis='" + geographicAxis + '\'' +
                ", birthDate='" + birthDate + '\'' +
                ", job='" + job + '\'' +
                ", workCycle='" + workCycle + '\'' +
                ", dateEntrySociety='" + dateEntrySociety + '\'' +
                ", releaseDateSociety='" + releaseDateSociety + '\'' +
                ", mainFunction='" + mainFunction + '\'' +
                ", assignment='" + assignment + '\'' +
                ", capacityAvv='" + capacityAvv + '\'' +
                ", rttBalance='" + rttBalance + '\'' +
                ", vacationPay='" + vacationPay + '\'' +
                ", notes='" + notes + '\'' +
                ", unknowCrc='" + unknowCrc + '}';
    }

}

``

ошибки консоли:

``

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'appController': Unsatisfied dependency expressed through field 'assignmentService'; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'assignmentService': Unsatisfied dependency expressed through field 'dao'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'assignmentDao': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Validation failed for query for method public abstract java.util.List com.open.mycapla.springmvc.dao.AssignmentDao.fetchAllAssignments()!

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'assignmentDao': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Validation failed for query for method public abstract java.util.List com.open.mycapla.springmvc.dao.AssignmentDao.fetchAllAssignments()!

Caused by: java.lang.IllegalArgumentException: Validation failed for query for method public abstract java.util.List com.open.mycapla.springmvc.dao.AssignmentDao.fetchAllAssignments()!

Caused by: java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: project is not mapped [select project.PROJECT_NAME, contributor.FIRST_NAME, assignment.START_DATE, assignment.END_DATE from project inner join assignment on assignment.id_ASSIGNMENT=project.ID_PROJECT inner join contributor on contributor.id=assignment.id_ASSIGNMENT]

Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: project is not mapped [select project.PROJECT_NAME, contributor.FIRST_NAME, assignment.START_DATE, assignment.END_DATE from project inner join assignment on assignment.id_ASSIGNMENT=project.ID_PROJECT inner join contributor on contributor.id=assignment.id_ASSIGNMENT]

Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: project is not mapped

Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'assignmentService': Unsatisfied dependency expressed through field 'dao'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'assignmentDao': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Validation failed for query for method public abstract java.util.List com.open.mycapla.springmvc.dao.AssignmentDao.fetchAllAssignments()!

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'assignmentDao': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Validation failed for query for method public abstract java.util.List com.open.mycapla.springmvc.dao.AssignmentDao.fetchAllAssignments()!

``

1 Ответ

0 голосов
/ 12 июня 2019

Ваш запрос не является JPQL.JPQL-запрос будет выглядеть следующим образом:

@Query("select a from Assignment a")
List<Assignment> fetchAllAssignments();

Но это то же самое, что вызов

dao.findAll();

, поэтому вам даже не нужно создавать запрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...