background image

Persisting Entity Instances

<< Application-Managed Entity Managers | Creating Queries >>
<< Application-Managed Entity Managers | Creating Queries >>

Persisting Entity Instances

Managed entity instances have a persistent identity and are associated with a persistence
context.
Detached entity instances have a persistent identify and are not currently associated with a
persistence context.
Removed entity instances have a persistent identity, are associated with a persistent context,
and are scheduled for removal from the data store.
Persisting Entity Instances
New entity instances become managed and persistent either by invoking the persist method,
or by a cascading persist operation invoked from related entities that have the
cascade=PERSIST
or cascade=ALL elements set in the relationship annotation. This means the
entity's data is stored to the database when the transaction associated with the persist
operation is completed. If the entity is already managed, the persist operation is ignored,
although the persist operation will cascade to related entities that have the cascade element
set to PERSIST or ALL in the relationship annotation. If persist is called on a removed entity
instance, it becomes managed. If the entity is detached, persist will throw an
IllegalArgumentException
, or the transaction commit will fail.
@PersistenceContext
EntityManager em;
...
public LineItem createLineItem(Order order, Product product,
int quantity) {
LineItem li = new LineItem(order, product, quantity);
order.getLineItems().add(li);
em.persist(li);
return li;
}
The persist operation is propagated to all entities related to the calling entity that have the
cascade
element set to ALL or PERSIST in the relationship annotation.
@OneToMany(cascade=ALL, mappedBy=
"order")
public Collection<LineItem> getLineItems() {
return lineItems;
}
Removing Entity Instances
Managed entity instances are removed by invoking the remove method, or by a cascading
remove
operation invoked from related entities that have the cascade=REMOVE or cascade=ALL
elements set in the relationship annotation. If the remove method is invoked on a new entity,
the remove operation is ignored, although remove will cascade to related entities that have the
Managing Entities
The Java EE 5 Tutorial · September 2007
698