Ont JPA/Hibernate à reproduire le “on DELETE SET NULL” fonctionnalité

J'ai pu JPA/Hibernate à reproduire le ON DELETE CASCADE fonctionnalité avec succès (on dirait que le comportement par défaut), mais je suis maintenant en essayant de reproduire le ON DELETE SET NULL fonctionnalité et je suis confronté à des problèmes.

Ce sont mes deux 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;

    //...
}

Lorsque j'essaie de supprimer un enseignant, l'erreur suivante s'affiche:

org.springframework.dao.DataIntegrityViolationException: impossible d'exécuter JDBC mise à jour par lot; SQL [supprimer de l'enseignant où teacher_id=?]; contrainte [null]

...

Causés par: org.mise en veille prolongée.exception à la règle.ConstraintViolationException: impossible d'exécuter JDBC mise à jour par lot

...

Causés par: java.sql.BatchUpdateException: saisie des Lots 0 supprimer de l'enseignant où teacher_id='1' a été abandonnée. Appel getNextException pour voir la cause.

Je fais quelque chose de mal? Est-il quelque chose de réalisable?

Merci.

  • voulez-vous définir toutes les colonnes de ce dossier est à null ? ou tous les champs de l'étudiant de l'entité
  • Je veux le student's teacher colonne de devenir null après la student's teacher est supprimé du système.
  • Non pas que vous souhaitez modifier votre schéma de JPA, mais je serais curieux de savoir l'effet de l'évolution à un ManyToMany avec cascade la suppression sur la table de jointure. Il faut supprimer l'association et de laisser l'étudiant.
InformationsquelleAutor satoshi | 2012-03-30