2012-10-05 2 views
1

j'ai une relation (un à plusieurs/plusieurs à un) entre le parent et l'enfant dans mon code comme celui-ciHibernate JPA retirer l'enfant de la table quand il retiré de la collection parent et parent de mise à jour

Le Parent

@JsonAutoDetect 
@Entity 
@Table(name = "Parent") 
public class Parent{ 

    private Integer id; 
    private List<Child> childs; 

    @Id 
    @GeneratedValue(strategy= GenerationType.AUTO) 
    @Column (name="idparent") 
    public Integer getId() { 
     return id; 
    } 
    public void setId(Integer id) { 
     this.id = id; 
    } 

    @OneToMany(mappedBy = "parent", cascade = CascadeType.ALL) 
    @LazyCollection (LazyCollectionOption.FALSE) 
    public List<Child> getChilds() { 
     return childs; 
    } 
    public void setChilds(List<Child> childs) { 
     for (Child child: childs) { 
      child.setParent(this); 
     } 
     this.childs= childs; 
    } 
} 

et l'enfant

@JsonAutoDetect 
@Entity 
@Table(name="Child") 
public class Child{ 

    private Integer id; 
    private Parent parent; 

    @Id 
    @GeneratedValue(strategy= GenerationType.AUTO) 
    @Column (name = "idchild") 
    public Integer getId() { 
     return id; 
    } 
    public void setId(Integer id) { 
     this.id = id; 
    } 

    @ManyToOne(fetch = FetchType.EAGER) 
    @NotFound(action = NotFoundAction.IGNORE) 
    @JoinColumn(name = "idparent") 
    @JsonIgnore 
    public Parent getParent() { 
     return parent; 
    } 
    public void setParent(Parent parent) { 
     this.parent= parent; 
    } 
} 

Tout est ok, mais quand je fais somthink comme

parent.getChilds().remove(child); 
session.update(parent); 

l'enfant is'nt retiré de la table, ce qui est le problème, pouvez-vous me aider s'il vous plaît, désolé pour mon mauvais anglais :-(

+0

Vous avez déjà une réponse acceptée, étant donné par l'un des principaux développeurs du projet Hibernate ... alors pourquoi rouvrez-vous cette question? – overmeulen

Répondre

3

child ne doit pas être retiré de la base de données dans ce cas. Si tel est le comportement que vous voulez, vous devez activer « l'élimination orpheline »:

@OneToMany(mappedBy = "parent", cascade = CascadeType.ALL, orphanRemoval=true) 
@LazyCollection (LazyCollectionOption.FALSE) 
public List<Child> getChilds() { 
    return childs; 
} 
+0

Je pense que cette solution est utilisée pour supprimer tous les enfants lors de la suppression du parent, mais ce que je veux est de supprimer l'enfant qui a été retiré de la collection prentile de la table enfant; quand je mets à jour le parent. – user820688

+1

Vous avez tort. Que diriez-vous de l'essayer;) –

+0

Oui l'ai essayé mais ne fonctionne pas :-( – user820688

0

Il peut être utile

Child c = (Child) parent.getChilds(); 
parent.getChilds().remove(c); 
c.setParent(null); 

ou

Child c = (Child) parent.getChilds(); 
parent.getChilds().remove(c); 
session.delete(c); 
Questions connexes