У меня проблема с отношениями многие ко многим. По сути, вот что я пытаюсь сделать. У меня есть 2 много ко многим таблицам, которые являются вложенными, как видно на следующем изображении. Диаграмма базы данных
При компиляции моего кода я получаю следующую ошибку:
Caused by: java.sql.SQLSyntaxErrorException: Unknown column 'weeks0_.employee_project_employee_id' in 'field list'
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:120) ~[mysql-connector-java-8.0.18.jar:8.0.18]
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97) ~[mysql-connector-java-8.0.18.jar:8.0.18]
at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) ~[mysql-connector-java-8.0.18.jar:8.0.18]
at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:953) ~[mysql-connector-java-8.0.18.jar:8.0.18]
at com.mysql.cj.jdbc.ClientPreparedStatement.executeQuery(ClientPreparedStatement.java:1003) ~[mysql-connector-java-8.0.18.jar:8.0.18]
at com.zaxxer.hikari.pool.ProxyPreparedStatement.executeQuery(ProxyPreparedStatement.java:52) ~[HikariCP-3.4.1.jar:na]
at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.executeQuery(HikariProxyPreparedStatement.java) ~[HikariCP-3.4.1.jar:na]
at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:57) ~[hibernate-core-5.4.6.Final.jar:5.4.6.Final]
Итак, я понимаю, что у меня проблема с неделями.
вот мои лица:
Неделя:
package com.achsogo.rpt.entity;
import javax.persistence.*;
import java.util.Set;
@Entity
@Table(name="week")
public class Week {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private int weekNumber;
private int year;
@OneToMany(mappedBy = "week", cascade = CascadeType.ALL, orphanRemoval = true, fetch =
FetchType.EAGER)
private Set<EmployeeProjectWeek> employeeProjects;
public Week() {
}
public Week(int weekNumber, int year) {
this.weekNumber = weekNumber;
this.year = year;
} //Getter and Setters
Проект:
import javax.persistence.*;
import java.util.*;
@Entity
@Table(name = "project")
public class Project {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String alias;
private String pspElement;
private int contractValue;
private int plannedCost;
private int plannedHours;
private int assignedHours;
private Date startDate;
private Date endDate;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "project", orphanRemoval = true, fetch =
FetchType.EAGER)
private Set<ProjectAP> projectAPS;
@ManyToOne
private Department department;
@OneToMany(mappedBy = "project", cascade = CascadeType.ALL, orphanRemoval = true, fetch =
FetchType.EAGER)
private Set<EmployeeProject> employees;
//Empty constructor
public Project(){}
//constructor for new project with default names
public Project(String alias){
this.alias = alias;
}
Сотрудник:
@Entity
@Table(name = "employee")
public class Employee {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String firstName;
private String lastName;
private String email;
private int employeeNumber;
private String acronym;
private int availability;
@OneToMany(mappedBy = "employee", cascade = CascadeType.ALL, orphanRemoval = true, fetch =
FetchType.EAGER)
private Set<EmployeeProject> projects;
@ManyToOne
private Department department;
@ManyToOne
private Role role;
Таблица между Проектом и Сотрудником (с классом для создания идентификатора):
EmployeeProjectID:
@Embeddable
public class EmployeeProjectId implements Serializable {
private Long projectId;
private Long employeeId;
private EmployeeProjectId(){}
public EmployeeProjectId(Long projectId, Long employeeId){
this.employeeId = employeeId;
this.projectId = projectId;
}
EmployeeProject: Именно здесь вызываются недели (если я не ошибаюсь)
@Entity
@Table(name = "project_employee")
public class EmployeeProject {
@EmbeddedId
private EmployeeProjectId id;
@ManyToOne(fetch = FetchType.EAGER)
@MapsId("projectId")
private Project project;
@ManyToOne(fetch = FetchType.EAGER)
@MapsId("employeeId")
private Employee employee;
@Column(name = "amount_time")
private int amountTime = 0;
@Column(name = "is_project_leader")
private boolean isProjectLeader = false;
@OneToMany(mappedBy = "employeeProject", cascade = CascadeType.ALL, orphanRemoval = true, fetch =
FetchType.EAGER)
private Set<EmployeeProjectWeek> weeks;
public EmployeeProject(){}
А теперь таблица между неделей и проектом Employee:
EmployeeProjectWeekId: для создания идентификатора для вложенной таблицы «многие ко многим»:
@Embeddable
public class EmployeeProjectWeekId implements Serializable {
private EmployeeProjectId employeeProjectId;
private Long weekId;
private EmployeeProjectWeekId(){}
И, наконец, EmployeeProjectweek:
@Entity
@Table(name="project_employee_week")
public class EmployeeProjectWeek {
@EmbeddedId
private EmployeeProjectWeekId id;
@ManyToOne(fetch = FetchType.EAGER)
@MapsId("weekId")
private Week week;
@ManyToOne(fetch = FetchType.EAGER)
@MapsId("employeeProjectId")
private EmployeeProject employeeProject;
@Column(name="amount_time")
private int amountTime = 0;
@Column(name="is_project_leader")
private boolean isProjectLeader= false;
public EmployeeProjectWeek(Week week, EmployeeProject employeeProject) {
this.week = week;
this.employeeProject = employeeProject;
this.id = new EmployeeProjectWeekId(employeeProject.getId(), week.getId());
}
Кто-нибудь знает, где я сделал ошибку? Заранее спасибо за ваше время!