The Java Persistence API is a Java programming language application programming interface
specification that describes the management of relational data in applications using Java
Platform, Standard Edition and Java Platform, Enterprise Edition.
The Java Persistence API originated as part of the work of the JSR 220 Expert Group of
the Java Community Process.
JPA 2.0 was the work of the JSR 317 Expert Group.
Persistence in this context covers three areas: the API itself, defined in the javax.persistence
package the Java Persistence Query Language
object/relational metadata
History The final release date of the JPA 1.0 specification
was 11 May 2006 as part of Java Community Process JSR 220.
The JPA 2.0 specification was released 10 December 2009.
The JPA 2.1 specification was released 22 April 2013.
Entities A persistence entity is a lightweight Java
class whose state is typically persisted to a table in a relational database.
Instances of such an entity correspond to individual rows in the table.
Entities typically have relationships with other entities, and these relationships are
expressed through object/relational metadata.
Object/relational metadata can be specified directly in the entity class file by using
annotations, or in a separate XML descriptor file distributed with the application.
The Java Persistence Query Language
The Java Persistence Query Language makes queries against entities stored in a relational
database.
Queries resemble SQL queries in syntax, but operate against entity objects rather than
directly with database tables.
Motivation Prior to the introduction of EJB 3.0 specification,
many enterprise Java developers used lightweight persistent objects, provided by either persistence
frameworks or data access objects instead of entity beans.
This is due to the fact that entity beans, in previous EJB specifications, called for
too much complicated code and heavy resource footprint, and they could be used only in
Java EE application servers because of interconnections and dependencies in the source code between
beans and DAO objects or persistence framework.
Thus, many of the features originally presented in third-party persistence frameworks were
incorporated into the Java Persistence API, and, as of 2006, projects like Hibernate and
TopLink Essentials have become themselves implementations of the Java Persistence API
specification.
Related technologies Enterprise JavaBeans
The EJB 3.0 specification included a definition of the Java Persistence API.
However, end-users do not need an EJB container or a Java EE application server in order to
run applications that use this persistence API.
Future versions of the Java Persistence API will be defined in a separate JSR and specification
rather than in the EJB JSR/specification.
The Java Persistence API replaces the persistence solution of EJB 2.0 CMP.
Java Data Objects API
The Java Persistence API was developed in part to unify the Java Data Objects API, and
the EJB 2.0 Container Managed Persistence API.
As of 2009 most products supporting each of those APIs support the Java Persistence API.
The Java Persistence API specifies persistence only for relational database management systems.
That is, JPA focuses on object-relational mapping.
Refer to JPA 2 spec section 1 introduction for clarification of the role of JPA, which
states very clearly "The technical objective of this work is to provide an object/relational
mapping facility for the Java application developer using a Java domain model to manage
a relational database."
The Java Data Objects specification supports ORM, as well as persistence to other types
of database models, for example flat file databases and NoSQL databases, including document
databases, graph databases, as well as literally any other conceivable datastore.
Service Data Object API
The designers of the Java Persistence API aimed to provide for relational persistence,
with many of the key areas taken from object-relational mapping tools such as Hibernate and TopLink.
Java Persistence API improved on and replaced EJB 2.0, evidenced by its inclusion in EJB
3.0.
The Service Data Objects API has a very different objective to the Java Persistence API and
is considered complementary.
The SDO API is designed for service-oriented architectures, multiple data formats rather
than only relational data, and multiple programming languages.
The Java Community Process manages the Java version of the SDO API; the C++ version of
the SDO API is managed via OASIS.
Hibernate
Hibernate provides an open source object-relational mapping framework for Java.
Versions 3.2 and later provide an implementation for the Java Persistence API.
Gavin King founded the Hibernate project.
He represented JBoss on JSR 220, the JCP expert group charged with developing JPA.
This led to ongoing controversy and speculation surrounding the relationship between JPA and
Hibernate.
Sun Microsystems has stated that ideas came from several frameworks, including Hibernate
and Java Data Objects.
JPA 2.0 Development of a new version of JPA 2.0 was
started in July 2007 in the Java Community Process as JSR 317.
JPA 2.0 was approved as final on 10 December 2009.
The focus of JPA 2.0 was to address features that were present in some of the popular ORM
vendors but could not gain consensus approval for JPA 1.0.
Main features included were: Expanded object-relational mapping functionality
support for collections of embedded objects, linked in the ORM with a many-to-one relationship
ordered lists combinations of access types
A criteria query API standardization of query 'hints'
standardization of additional metadata to support DDL generation
support for validation Shared object cache support.
Vendors supporting JPA 2.0: Batoo JPA
DataNucleus EclipseLink
JBoss with Hibernate Kundera
ObjectDB OpenJPA
IBM, for WebSphere Application Server Versant Corporation JPA
JPA 2.1 Development of a new version of JPA 2.1 was
started in July 2011 as JSR 338.
JPA 2.1 was approved as final on 22 May 2013.
Main features included were: Converters - allowing custom code conversions
between database and object types.
Criteria Update/Delete - allows bulk updates and deletes through the Criteria API.
Stored Procedures - allows queries to be defined for database stored procedures.
Schema Generation Entity Graphs - allow partial or specified
fetching or merging of objects.
JPQL/Criteria enhancements - arithmetic sub-queries, generic database functions, join ON clause,
TREAT option.
Vendors supporting JPA 2.1 DataNucleus
EclipseLink Hibernate
See also JDBC
XQJ JPQL
MyBatis pureQuery
OpenXava SAP NetWeaver Application Server
JOPS .NET Persistence API
References
External links General info
JCP Persistence page GlassFish's Persistence page
Documentation for the final version of the EJB3 spec
JPA Java Persistence API Tutorials
Persistence in the Java EE 5 tutorial Java EE 6 Persistence API tutorial
Java EE 7 Persistence API tutorial Java EE 6 Persistence API Javadoc
Java EE 7 Persistence API Javadoc Hibernate EntityManager User guide
Hibernate Javadoc: org.hibernate.ejb EclipseLink JPA tutorials for Application
Servers DataNucleus JPA tutorial for RDBMS
Versant JPA Getting Started Tutorial JPA Tutorial using OpenJPA as implementation