Hibernate: Cascade Type

hibernate, java, jpa

Solution

The cascade from A to B should be placed on the field referencing `B` in class `A`, the cascade from B to A should be placed on the field referencing `A` in class `B`.

public class A {
    @OneToOne(cascade = {CascadeType.ALL})
    B b;
}

Should be in class `A`, as you want every action to be cascaded to `B`.

public class B {
    @OneToOne(cascade = {CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH})
    A a;
}

Should be in class `B`, as you only want certain actions cascaded to `A`

Problem

Let's I have entity `A` and entity `B`. Entity `A` have `@OneToOne` relationship with `B`. I want do next: if I remove A then B must be removed also. If I remove B then A isn't removed. In which entity I must set ``` @OneToOne(cascade = {CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH}) ``` and in which side I must set ``` @OneToOne(cascade = {CascadeType.ALL}) ``` ?

Original source