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})
?
Cascading is a phenomenon involving one object propagating to other objects via a relationship. It is transitive in nature and the cascade attribute in hibernate defines the relationship between the entities. The cascading types supported by the hibernate framework are as follow: CascadeType.
CascadeType. MERGE. The merge operation copies the state of the given object onto the persistent object with the same identifier. CascadeType. MERGE propagates the merge operation from a parent to a child entity.
To establish a dependency between related entities, JPA provides javax. persistence. CascadeType enumerated types that define the cascade operations. These cascading operations can be defined with any type of mapping i.e. One-to-One, One-to-Many, Many-to-One, Many-to-Many.
Cascading is a feature in Hibernate, which is used to manage the state of the mapped entity whenever the state of its relationship owner (superclass) affected. When the relationship owner (superclass) is saved/ deleted, then the mapped entity associated with it should also be saved/ deleted automatically.
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With