2012-11-07 3 views
3

J'ai trouvé beaucoup de ces problèmes, mais pour une raison quelconque, ils ne fonctionnent pas pour moi. Donc, je fais évidemment quelque chose de mal.Impossible de supprimer les enfants orphelins dans Hibernate

Forme Objet:

@Entity 
@Table(name = "WEBFORMS_WEBFORM") 
public class Form { 

    @Id 
    @GeneratedValue 
    @Column(name = "FORM_ID") 
    Long id; 

    @Column(name = "NAME") 
    String name; 

    @OrderBy("priority") 
    @OneToMany(mappedBy = "form", cascade={javax.persistence.CascadeType.ALL}, orphanRemoval = true) 
    Set<FormField> formFields; 

    @OrderBy("creationDate DESC") 
    @OneToMany(mappedBy = "form", cascade={javax.persistence.CascadeType.ALL}, orphanRemoval = true) 
    Set<FormResult> formResults; 

    @Column(name = "ALLOW_GUESTS") 
    Boolean allowGuest; 

    @Column(name = "SEND_MAIL") 
    Boolean sendMail; 

champ de formulaire Objet:

@Entity 
@Table(name = "WEBFORMS_FORM_FIELD") 
public class FormField { 

    @Id 
    @GeneratedValue 
    @Column(name = "FORM_FIELD_ID") 
    Long id; 

    @Column(name = "TYPE") 
    String type; 

    @Column(name = "CONTENT") 
    String content; 

    @Column(name = "PRIORITY") 
    Long priority; 

    @ManyToOne() 
    @JoinColumn(name = "FORM_ID") 
    public Form form; 

J'utilise en veille prolongée annotation:

<dependency> 
    <groupId>org.hibernate</groupId> 
    <artifactId>hibernate-annotations</artifactId> 
    <version>3.5.6-Final</version> 
</dependency> 

Si je crée un objet Champ de formulaire dans le formulaire, alors aucun problème. Les deux objets sont créés. Lorsque je supprime l'objet de formulaire, l'objet de champ de formulaire reste dans la base de données.

Répondre

0

Beaucoup d'une relation établie sur l'entité FormField. En conséquence, une contrainte de clé étrangère sur le champ. Il ne permet pas de supprimer l'entité. La contrainte a une cascade d'attributs que vous devez déclarer en veille prolongée.

@ManyToOne (cascade = {javax.persistence.CascadeType.ALL}) 
0

mon mauvais. J'essayais de supprimer l'objet de formulaire par l'ID. Cela n'a pas fonctionné.

public void deleteForm(Form form) { 

     Session session = HibernateUtil.getSession(); 
     session.delete(form); 
     HibernateUtil.shutDown(session); 
    } 

La suppression de l'objet que je reçois après une requête fonctionne correctement.

Questions connexes