Cascading
There is one annotation attribute that we have ignored so far: the
cascade() attribute of
the @OneToOne, @OneToMany, @ManyToOne, and @ManyToMany relationship annotations. This
section discusses in detail the behavior that is applied when using the
cascade() attribute.
When you perform an entity manager operation on an entity bean
instance, you can automatically have the same operation performed on any
relationship properties the entity may have. This is called
cascading. For example, if you are persisting a new
Employee entity with a new address and
phone number, all you have to do is wire the object, and the entity
manager can automatically create the employee and its related entities,
all in one persist() method
call:
Employee employee = new Employee(); customer.setAddress(new Address()); customer.getPhoneNumbers().add(new Phone()); // create them all in one entity manager invocation entityManager.persist(employee);
With the Java Persistence specification, cascading can be applied to
a variety of entity manager operations, including persist(), merge(), remove(), and refresh(). This feature is enabled by setting the javax.persistence.CascadeType of the
relationship annotation’s cascade()
attribute. The CascadeType is defined as a Java
enumeration:
public enum CascadeType
{
ALL, PERSIST,
MERGE, REMOVE,
REFRESH
}The ALL value represents all of
the cascade operations. The remaining values represent individual cascade
operations. The cascade() attribute is an array of the cascade ...