сохранение в таблице ассоциаций @ManyToMany с дополнительными столбцами делает работу

#spring #hibernate #jpa

#весна #зимовать #jpa

Вопрос:

Я пытаюсь спасти многих студентов и тареев, но я не могу этого сделать, я действительно больше не знаю, что делать, я перепробовал все, но я не знаю, что не так в моем коде.только один студент может быть сохранен в моей базе данных….

метод сохранения (метод обслуживания, в котором используется логика)

 @Override @Transactional public void saveTarea(Tarea tarea) {  Listlt;TareaStudentsgt; tareasStudents = new ArrayListlt;TareaStudentsgt;();  Courses course = courseDAO.findCourse(tarea.getCourseId());  tarea.setCourse(course);  Listlt;Studentgt; students = studentDAO.findStudentsByCourse(tarea.getCourseId());   for(Student student : students) {  TareaStudents tareasStudent = new TareaStudents();  tareasStudent.setTarea(tarea);  tareasStudent.setStudent(student);  tarea.getStudents().add(tareasStudent);  }      tareasDAO.saveTarea(tarea);   }  

таблица tareas_students

 @Entity @Table(name = "tareas_students") public class TareaStudents {    @Id  @GeneratedValue(strategy = GenerationType.IDENTITY)  @Column(name="id")  private Integer id;    @ManyToOne(fetch = FetchType.LAZY)  @JoinColumn(name = "id_tarea")  private Tarea tarea;   @ManyToOne(fetch = FetchType.LAZY)  @JoinColumn(name = "id_student")  private Student student;  

Класс тареа

 @Entity  @Table(name = "tareas")  public class Tarea {    @Id  @GeneratedValue(strategy = GenerationType.IDENTITY)  @Column(name="id")  private Integer id;    @Column  @Size(max = 20, message = "la longitud es demasiado larga")  @NotBlank(message = "El campo no puede estar vacio")  private String nombre;    @Column(name="code")  @Pattern(regexp = "(TL-)([1-9]{4})",message = "el dato introducido no es correcto")  private String codigo;    @Column(name="fecha_entrega")  @DateTimeFormat (pattern="dd/MM/yyyy")  private LocalDate entregaDate;    @Column  @NotBlank(message = "El campo no puede estar vacio")  private String descripcion;      @OneToMany(mappedBy = "student")  private Setlt;TareaStudentsgt; students = new HashSetlt;TareaStudentsgt;();  

Ученик класса

 @Entity @Table(name = "students") public class Student {    @Id  @GeneratedValue(strategy = GenerationType.IDENTITY)  @Column(name="id")  private Integer id;  @Column  @Size(max = 20, message = "la longitud es demasiado larga")  @NotBlank(message = "El campo no puede estar vacio")  private String nombre;    @Column  @Size(max = 20, message = "la longitud es demasiado larga")  @NotBlank(message = "El campo no puede estar vacio")  private String apellido;    @Column  @Pattern(regexp = "\d{8}[a-z A-Z]",message = "el dato introducido no es correcto")  private String dni;    @OneToOne(mappedBy = "student",cascade= {CascadeType.PERSIST, CascadeType.MERGE,  CascadeType.DETACH, CascadeType.REFRESH})  private User user;    @OneToOne(fetch = FetchType.LAZY)  @JoinColumn(name = "id_genero", referencedColumnName = "id")  private Genero genero;    @Transient  private int generoOptionId;    @ManyToMany(fetch=FetchType.LAZY,  cascade= {CascadeType.PERSIST, CascadeType.MERGE,  CascadeType.DETACH, CascadeType.REFRESH})  @JoinTable(  name="courses_students",  joinColumns=@JoinColumn(name="id_student"),  inverseJoinColumns=@JoinColumn(name="id_course")  )  private Setlt;Coursesgt; courses = new HashSetlt;Coursesgt;();      @OneToMany(mappedBy = "tarea")  private Setlt;TareaStudentsgt; tareas = new HashSetlt;TareaStudentsgt;();  

Комментарии:

1. Вы сохраняете только экземпляр Tarea, больше ничего. Вам нужен способ сохранить другие объекты на графике (например, TareaStudents), либо напрямую вызывая persist/merge для них, либо определяя, где находятся операции каскада persist/merge. Вы не установили обратный указатель на TareaStudents, чтобы он указывал на Tarea, поэтому его FK не следует устанавливать. Однако неясно, в чем ваша проблема, поскольку вы упоминаете проблемы с сохранением ученика и даже многие другие отношения в описании проблемы, но показываете только сохранение Тареи, которая ссылается на существующие экземпляры учащихся.