Witam,
mam problem z zapisywaniem danych w tabeli łączącej. Zamiast zapisywać dane w tabeli to nadpisuję się tylko pierwszy rekord w tabeli łączącej.
Mam 2 encje: pracownika i zadania. Wyglądające tak:
@Entity(name = "employees")
public class Employee{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "employee_id")
private int id;
@NotEmpty
@NotNull
@Size(min = 3, max = 30)
private String name;
@NotEmpty
@NotNull
@Size(min = 3, max = 30)
private String surname;
@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JoinTable(
name = "employees_tasks",
joinColumns = @JoinColumn(name = "employee_id"),
inverseJoinColumns = @JoinColumn(name = "task_id")
)
private Set<Task> tasks = new HashSet<>();
@OneToOne
private User user;
public void addTask(Task task) {
this.tasks.add(task);
task.getEmployees().add(this);
}
@Entity(name = "tasks")
public class Task{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "task_id")
private int id;
private String title;
private String description;
private int numberOfLeftContractors;
@ManyToMany(mappedBy = "tasks",cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private Set<Employee> employees = new HashSet<>();;
No i oczywiście w tych klasach poza tym kodem są settery, gettery i constructory.
Zadanie dla pracownika przydzielam w controllerze taką metodą:
@RequestMapping(value = "/task/assign/{taskId}")
public String assignTask(@PathVariable("taskId")Integer id, @ModelAttribute Employee employee){
Task task = tasksService.getTaskById(id);
employee.addTask(task);
employeeService.save(employee);
return "redirect:/employees";
}