Мне удалось использовать JPA / Hibernate для успешной репликации функциональности ON DELETE CASCADE
(похоже на поведение по умолчанию), но сейчас я пытаюсь повторить функциональность ON DELETE SET NULL
, и у меня возникают проблемы.
Это мои два класса:
@Entity
@Table(name = "teacher")
public class Teacher
{
@Id
@GeneratedValue
@Column(name = "id", nullable = false, length = 4)
private int id;
@OneToMany(mappedBy = "teacher")
private List<Student> studentList;
// ...
}
@Entity
@Table(name = "student")
public class Student
{
@Id
@GeneratedValue
@Column(name = "id", nullable = false, length = 4)
private int id;
@ManyToOne(optional = true)
@JoinColumn(name = "teacher_id", nullable = true)
private Teacher teacher;
// ...
}
Когда я пытаюсь удалить учителя, появляется следующая ошибка:
org.springframework.dao.DataIntegrityViolationException: не удалось выполнить пакетное обновление JDBC; SQL [удалить из учителя, где teacher_id =?]; ограничение [ноль]
...
Вызвано: org.hibernate.exception.ConstraintViolationException: не удалось выполнить пакетное обновление JDBC
...
Вызвано: java.sql.BatchUpdateException: пакетная запись 0 удаляется из учителя, где teacher_id = '1' был прерван. Вызовите getNextException, чтобы увидеть причину.
Я что-то не так делаю? Это что-то достижимое?
Спасибо.