2.
JPA Extensions

The following sections outline the runtime interfaces you can use to access
OpenJPA-specific functionality from JPA. Each interface contains services and
convenience methods missing from the JPA specification. OpenJPA strives to use
the same naming conventions and API patterns as standard JPA methods in all
extensions, so that OpenJPA JDO APIs feel as much as possible like standard JPA.

You may have noticed the examples throughout this document using the
OpenJPAPersistence.cast methods to cast from standard
JPA interfaces to OpenJPA extended interfaces. This is the recommended practice.
Some application server vendors may proxy OpenJPA's JPA implementation,
preventing a straight cast. OpenJPAPersistence's
cast methods work around these proxies.

We provide additional information on the OpenJPAPersistence
helper
below.

2.1.
OpenJPAEntityManagerFactory

The org.apache.openjpa.persistence.OpenJPAEntityManagerFactory
interface extends the basic
javax.persistence.EntityManagerFactory with OpenJPA-specific
features. The OpenJPAEntityManagerFactory offers APIs to
access the OpenJPA data and query caches and to perform other OpenJPA-specific
operations. See the
interface Javadoc for details.

2.2.
OpenJPAEntityManager

All OpenJPA EntityManagers implement the
org.apache.openjpa.persistence.OpenJPAEntityManager interface. This interface extends the standard
javax.persistence.EntityManager. Just as the standard
EntityManager is the primary window into JPA services, the
OpenJPAEntityManager is the primary window from JPA into
OpenJPA-specific functionality. We strongly encourage you to investigate the API
extensions this interface contains.

2.3.
OpenJPAQuery

OpenJPA extends JPA's standard query functionality with the
org.apache.openjpa.persistence.OpenJPAQuery interface. See its
Javadoc
for details on the convenience methods it provides.

2.4.
Extent

An Extent is a logical view of all persistent instances
of a given entity class, possibly including subclasses. OpenJPA adds the
org.apache.openjpa.persistence.Extent class to the set of
Java Persistence APIs. The following code illustrates iterating over all
instances of the Magazine entity, without subclasses:

2.5.
StoreCache

In addition to the EntityManager object cache mandated by
the JPA specification, OpenJPA includes a flexible datastore-level cache. You
can access this cache from your JPA code using the
org.apache.openjpa.persistence.StoreCache facade.
Section 1, “
Data Cache
” has detailed information on OpenJPA's
data caching system, including the StoreCache facade.

2.7.
FetchPlan

Many of the aforementioned OpenJPA interfaces give you access to an
org.apache.openjpa.persistence.FetchPlan instance. The
FetchPlan allows you to exercise some control over how objects are
fetched from the datastore, including
large result set support, custom fetch
groups, and lock levels.

Fetch plans pass on from parent components to child components. The
EntityManagerFactory settings (via your configuration properties)
for things like the fetch size, result set type, and custom fetch groups are
passed on to the fetch plan of the EntityManagers it
produces. The settings of each EntityManager, in turn,
are passed on to each Query and Extent
it returns. Note that the opposite, however, is not true. Modifying
the fetch plan of a Query or Extent
does not affect the EntityManager's
configuration. Likewise, modifying an EntityManager's
configuration does not affect the EntityManagerFactory.