Delete child from parent and parent from child automatically with JPA annotations
hibernate, hibernate-mapping, java, jpa, orm
Solution
The `remove` entity state transition should cascade from parent to children, not the other way around.
You need something like this:
class Parent {
String name;
@OneToMany(mappedBy = "parent", fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true)
List<Child> children = new ArrayList<>();
public void addChild(Child child) {
child.setParent(this);
children.add(child);
}
public void removeChild(Child child) {
children.remove(child);
child.setParent(null);
}
}
class Child {
String name;
@ManyToOne
Parent parent;
@OneToOne(mappedBy = "child", cascade = CascadeType.ALL, orphanRemoval = true)
Toy toy;
}
class Toy {
String name;
@OneToOne
Child child;
}
Problem
Suppose that we have 3 Entities object class: ``` class Parent { String name; List<Child> children; } class Child { String name; Parent parent; } class Toy { String name; Child child; } ``` How can I use JPA2.x (or hibernate) annotations to: - Delete all children automatically when parent delete (one to many) - Delete child automatically from children list when it is deleted (many to one) - Delete toy automatically when child remove (one to one) I'm using Hibernate 4.3.5 and mysql 5.1.30. Thanks