He podido tener JPA/Hibernate para replicar la funcionalidad ON DELETE CASCADE
con éxito (parece el comportamiento predeterminado) pero ahora estoy tratando de replicar el ON DELETE SET NULL
funcionalidad y estoy enfrentando problemas.Tener JPA/Hibernate para replicar la funcionalidad "ON DELETE SET NULL"
Estos son mis dos clases:
@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;
// ...
}
Cuando intento eliminar un maestro, aparece el siguiente error:
org.springframework.dao.DataIntegrityViolationException: No se pudo ejecutar la actualización por lotes JDBC; SQL [eliminar del profesor donde teacher_id =?]; restricción [nula]
...
causada por: org.hibernate.exception.ConstraintViolationException: No se pudo ejecutar la actualización por lotes JDBC
...
causada por: java.sql.BatchUpdateException: entrada por lotes 0 eliminar del maestro donde teacher_id = '1' fue abortado. Llame getNextException para ver la causa.
¿Estoy haciendo algo mal? ¿Es algo alcanzable?
Gracias.
¿Desea establecer todas las columnas de ese registro en nulo? o todos los campos de la entidad estudiantil – kommradHomer
Quiero que la columna 'teacher'' teacher' se convierta en 'null' después de que el' teacher' 'teacher' se elimine del sistema. – satoshi
No es que desee cambiar su esquema para JPA, pero me gustaría tener curiosidad por el efecto de cambiarlo a ManyToMany con eliminación de cascada en la tabla de unión. Debe eliminar la asociación y dejar al alumno. – kevingallagher