Hibernate @OneToMany. Проблема с CascadeType

119
02 января 2021, 23:20

Проблема: при указании всех CascadeType, кроме CascadeType.REMOVE над полем private List<Course> courses в классе Instructor, при сохранении объекта класса Instructor не происходит сохранение объектов класса Course, которые добавляются в List<Course> courses. При этом в логах нет никаких ошибок. Но если в классе Instructor над полем private List<Course> courses указать CascadeType.ALL, то все работает. Что не так?

Instructor.class

@Entity
@Table(name = "instructor")
public class Instructor {
    @Id
    @SequenceGenerator(name = "instructor_seq_gen", sequenceName = "instructor_id_seq", allocationSize = 1)
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "instructor_seq_gen")
    @Column(name = "id")
    private int id;
    @Column(name = "first_name")
    private String firstName;
    @Column(name = "last_name")
    private String lastName;
    @Column(name = "email")
    private String email;
    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "instructor_detail_id")
    private InstructorDetail instructorDetail;
    @OneToMany(mappedBy = "instructor", cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.DETACH, CascadeType.REFRESH})
    private List<Course> courses;
    public Instructor() {
    }
    public Instructor(String firstName, String lastName, String email) {
        this.firstName = firstName;
        this.lastName = lastName;
        this.email = email;
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getFirstName() {
        return firstName;
    }
    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }
    public String getLastName() {
        return lastName;
    }
    public void setLastName(String lastName) {
        this.lastName = lastName;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
    public InstructorDetail getInstructorDetail() {
        return instructorDetail;
    }
    public void setInstructorDetail(InstructorDetail instructorDetail) {
        this.instructorDetail = instructorDetail;
    }
    public List<Course> getCourses() {
        return courses;
    }
    public void setCourses(List<Course> courses) {
        this.courses = courses;
    }
    public void add(Course course) {
        if (courses == null) {
            courses = new ArrayList<>();
        }
        courses.add(course);
        course.setInstructor(this);
    }
    @Override
    public String toString() {
        return "Instructor{" +
                "id=" + id +
                ", firstName='" + firstName + '\'' +
                ", lastName='" + lastName + '\'' +
                ", email='" + email + '\'' +
                ", instructorDetail=" + instructorDetail +
                '}';
    }
}

Course.class

@Entity
@Table(name = "course")
public class Course {
    @Id
    @SequenceGenerator(name = "course_seq_gen", sequenceName = "course_id_seq", allocationSize = 1)
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "course_seq_gen")
    @Column(name = "id")
    private int id;
    @Column(name = "title")
    private String title;
    @ManyToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.DETACH, CascadeType.REFRESH})
    @JoinColumn(name = "instructor_id")
    private Instructor instructor;
    public Course() {
    }
    public Course(String title) {
        this.title = title;
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public Instructor getInstructor() {
        return instructor;
    }
    public void setInstructor(Instructor instructor) {
        this.instructor = instructor;
    }
    @Override
    public String toString() {
        return "Course{" +
                "id=" + id +
                ", title='" + title + '\'' +
                '}';
    }
}
READ ALSO
Как изменить фон TextView элемента в списке?

Как изменить фон TextView элемента в списке?

У меня есть класс Main3Activity, в нем я использую adapter

114
Запись данных в List в Thymeleaf

Запись данных в List в Thymeleaf

Как записывать данные в List в Thymeleaf? Выдает ошибку: orgthymeleaf

124
FTP портит файлы JS

FTP портит файлы JS

При загрузке и скачивании файлов JS через FileZilla часто вижу, что файлы портятсяКак решить эту проблему?

100