Я пытаюсь научиться работать с Hibernate, но, вероятно, я не понимаю @ManyToOne
и обратные отношения.У меня есть две сущности Author
и Department
.Один автор имеет один отдел, один отдел имеет много авторов.
Когда я удаляю автора, с отделом ничего не должно происходить.Когда я удаляю Отдел, FK в таблице Автора должен быть обновлен до значения NULL
(Автор НЕ должен быть удален).
Я нашел хорошее объяснение инверсии и выяснил, что Author
является владельцем, и в соответствии с этой веткой при удалении дочернего элемента (Отдела) FK должен быть установлен на NULL
.Но этого не происходит, потому что удаляется только Department и FK остается в таблице Author (что приводит к org.hibernate.ObjectNotFoundException: No row with the given identifier exists
).
Когда я добавляю аннотацию CascadeType.REMOVE
к @OneToMany
в сущности Department
, тогда всеПривязанные к отделу авторы также удаляются.Ни одно из вышеупомянутых состояний не желательно.Я просто хочу удалить Отдел и установить FK в таблице Автор на NULL
.Как это сделать?
Author
и Department
сущностей с аннотациями:
@Entity
@Table(name = "author")
public class Author implements Serializable {
@Id
@Column(name = "idauthor")
@GeneratedValue
private Integer idAuthor;
@DepartmentFormat
@ManyToOne
@JoinColumn(name = "department", nullable = true)
private Department department;
}
@Entity
@Table(name="department")
public class Department implements Serializable {
@Id
@Column(name="iddepartment")
@GeneratedValue
private Integer iddepartment;
@OneToMany(mappedBy = "department", cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH})
private Set<Author> authors;
}
Заранее спасибо