I've been able to have JPA/Hibernate to replicate the ON DELETE CASCADE
functionality successfully (seems like the default behaviour) but I'm now trying to replicate the ON DELETE SET NULL
functionality and I'm facing problems.
These are my two classes:
@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;
// ...
}
When I try to delete a teacher, the following error appears:
org.springframework.dao.DataIntegrityViolationException: Could not execute JDBC batch update; SQL [delete from teacher where teacher_id=?]; constraint [null]
...
Caused by: org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
...
Caused by: java.sql.BatchUpdateException: Batch entry 0 delete from teacher where teacher_id='1' was aborted. Call getNextException to see the cause.
Am I doing something wrong? Is it something achievable?
Thank you.
student
'steacher
column to becomenull
after thestudent
'steacher
is deleted from the system. – Resolvent@OnDelete(onDeleteAction=SET_NULL)
: hibernate.atlassian.net/browse/HHH-4410 – Tartan