user1079877 user1079877 - 1 month ago 21
Java Question

Delete child from parent and parent from child automatically with JPA annotations

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:


  1. Delete all children automatically when parent delete (one to many)

  2. Delete child automatically from children list when it is deleted (many to one)

  3. Delete toy automatically when child remove (one to one)



I'm using Hibernate 4.3.5 and mysql 5.1.30.

Thanks

Answer

You need something like this:

class Parent {
    String name;
    @OneToMany(mappedBy = "parent", fetch = FetchType.LAZY, cascade = CascadeType.ALL, orphanRemoval = true)
    List<Child> children;

    public void addChild(Child child) {
        child.setParent(this);
        children.add(child);
    }

    public void removeChild(Child child) {
        children.remove(child);
        if (child != null) {
            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;
}

The remove should cascade from parent to children, not the other way around.

Comments