Успях да накарам 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=?]; ограничение [null]
...
Причинено от: org.hibernate.exception.ConstraintViolationException: Не може да се изпълни пакетна актуализация на JDBC
...
Причинено от: java.sql. BatchUpdateException: Изтриване на партиден запис 0 от учител, където teacher_id='1' е прекратено. Обадете се на getNextException, за да видите причината.
Правя ли нещо нередно? Дали е нещо постижимо?
Благодаря ти.
teacher
наstudent
да станеnull
, след катоteacher
наstudent
бъде изтрита от системата. - person satoshi   schedule 02.04.2012