Example: A Persistent Employee Registry
From our simple Employee entity
defined earlier, we can use the EntityManager facilities to perform CRUD (Create, Read, Update, Delete) operations and build a
simple persistent registry of
employees. The full example is available in greater detail in Appendix F.
A Transactional Abstraction
Before we can take advantage of the EntityManager to flush and synchronize our
changes with the database, we must set up a transactional context within
which our code can run. Because we’re not going to delve into the full
features of transactions until later, let’s define a simple abstraction
that marks the beginning and end of the transactional context.
public interface TxWrappingLocalBusiness
{
**
* Wraps the specified tasks in a new Transaction
*
* @param task
* @throws IllegalArgumentException If no tasks are specified
* @throws TaskExecutionException If an error occurred in invoking
* {@link Callable#call()}
*/
void wrapInTx(Callable<?>... tasks) throws IllegalArgumentException,
TaskExecutionException;
}From here we can construct simple java.util.concurrent.Callable implementations
that encapsulate our JPA operations, and these will all run within a
transaction that starts and ends with the invocation to wrapInTx. Let’s assume we have an instance
called txWrapper that implements
TxWrappingLocalBusiness for
us.
Persisting Entities
Persisting an entity is the act of inserting it within a database. We persist entities that have not yet been created in the ...