2009-07-23 9 views
0
@Entity 
public class Parent { 
    @Id 
    @GeneratedValue(strategy=GenerationType.TABLE) 
    int id; 

    @OneToMany(cascade=CascadeType.REMOVE) 
    List<Item> children = new ArrayList<Child>(); 
} 

@Entity 
public class Child { 
    @Id 
    @GeneratedValue(strategy=GenerationType.TABLE) 
    int id; 
} 

Comme vous pouvez le voir ci-dessus, j'ai une OneToMany-Relation entre parent et enfant. Si je supprime une instance de parent, tous les enfants sont également supprimés. Y a-t-il un moyen de faire fonctionner l'inverse?JPA: Reverse cascading delete

Parent p = new Parent(); 
Child c = new Child(); 
p.children.add(c); 

EntityManager.persist(p); 
EntityManager.persist(c); 

EntityManager.remove (c); 

Ce code s'exécute sans exception, mais lorsque je charge p la prochaine fois, un nouvel enfant est joint.

Répondre

2

Si vous voulez travailler supprime des deux côtés, vous devez définir une relation bidirectionnelle entre Parent et Child:

// in Parent 
@OneToMany(cascade=CascadeType.REMOVE, mappedBy="parent") 
List<Item> children = new ArrayList<Child>(); 

// in Child 
@ManyToOne 
Parent parent;