Jakarta Persistence, also known as JPA (abbreviated from the former name Java Persistence API) is a
Jakarta EE
Jakarta EE, formerly Java Platform, Enterprise Edition (Java EE) and Java 2 Platform, Enterprise Edition (J2EE), is a set of specifications, extending Java SE with specifications for enterprise features such as distributed computing and web serv ...
application programming interface
An application programming interface (API) is a connection between computers or between computer programs. It is a type of software Interface (computing), interface, offering a service to other pieces of software. A document or standard that des ...
specification that describes the management of
relational data in enterprise
Java
Java is one of the Greater Sunda Islands in Indonesia. It is bordered by the Indian Ocean to the south and the Java Sea (a part of Pacific Ocean) to the north. With a population of 156.9 million people (including Madura) in mid 2024, proje ...
applications.
Persistence in this context covers three areas:
* The
API
An application programming interface (API) is a connection between computers or between computer programs. It is a type of software interface, offering a service to other pieces of software. A document or standard that describes how to build ...
itself, defined in the
jakarta.persistence
/code> package ( for Jakarta EE 8 and below)
* The Jakarta Persistence Query Language (JPQL; formerly 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
The Java Community Process (JCP), established in 1998, is a formal mechanism that enables interested parties to develop standard technical specifications for Java technology. Becoming a member of the JCP requires solid knowledge of the Java program ...
JSR 220. The JPA 2.0 specification was released 10 December 2009 (the Java EE 6 platform requires JPA 2.0). The JPA 2.1 specification was released 22 April 2013 (the Java EE 7 platform requires JPA 2.1). The JPA 2.2 specification was released in the summer of 2017. The reference implementation
In the software development process, a reference implementation (or, less frequently, sample implementation or model implementation) is a program that implements all requirements from a corresponding specification. The reference implementation ...
for JPA 1 and 2 was EclipseLink
EclipseLink is the open source Eclipse Persistence Services Project from the Eclipse Foundation. The software provides an extensible framework that allows Java developers to interact with various data services, including databases, web services, ...
.
Jakarta Persistence 3.1 was released in the spring of 2022 as part of Jakarta EE 10. Jakarta Persistence 3.2 was released in spring 2024, targeting inclusion in Jakarta EE 11. EclipseLink
EclipseLink is the open source Eclipse Persistence Services Project from the Eclipse Foundation. The software provides an extensible framework that allows Java developers to interact with various data services, including databases, web services, ...
and Hibernate are compatible implementations.
Entities
A persistence entity
An entity is something that Existence, exists as itself. It does not need to be of material existence. In particular, abstractions and legal fictions are usually regarded as entities. In general, there is also no presumption that an entity is Lif ...
is a lightweight Java class
Java is one of the Greater Sunda Islands in Indonesia. It is bordered by the Indian Ocean to the south and the Java Sea (a part of Pacific Ocean) to the north. With a population of 156.9 million people (including Madura) in mid 2024, pro ...
with its state typically persisted to a table
Table may refer to:
* Table (database), how the table data arrangement is used within the databases
* Table (furniture), a piece of furniture with a flat surface and one or more legs
* Table (information), a data arrangement with rows and column ...
in a relational database
A relational database (RDB) is a database based on the relational model of data, as proposed by E. F. Codd in 1970.
A Relational Database Management System (RDBMS) is a type of database management system that stores data in a structured for ...
. 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 mapping (ORM) metadata. This metadata may be specified directly in the entity class file by using annotations or in a separate XML
Extensible Markup Language (XML) is a markup language and file format for storing, transmitting, and reconstructing data. It defines a set of rules for encoding electronic document, documents in a format that is both human-readable and Machine-r ...
descriptor file distributed with the application.
Example
An example entity class with ORM metadata declared using annotations (import statements and setters/getters are omitted for simplicity).
@Entity
public class Person
The @Entity
annotation declares that the class represents an entity. @Id
declares the attribute which acts as the primary key
In the relational model of databases, a primary key is a designated attribute (column) that can reliably identify and distinguish between each individual record in a table. The database creator can choose an existing unique attribute or combinati ...
of the entity. Additional annotations may be used to declare additional metadata (for example changing the default table name in the @Table
annotation), or to create associations between entities.
Query Language
The Jakarta Persistence Query Language (JPQL; formerly Java Persistence Query Language) makes queries against entities stored in a relational database. Queries resemble SQL
Structured Query Language (SQL) (pronounced ''S-Q-L''; or alternatively as "sequel")
is a domain-specific language used to manage data, especially in a relational database management system (RDBMS). It is particularly useful in handling s ...
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 (such as Hibernate) or data access object
In software, a data access object (DAO) is a pattern that provides an abstract interface to some type of database or other persistence mechanism. By mapping application calls to the persistence layer, the DAO provides data operations without ex ...
s (DAO) instead of by using entity beans. This is because entity beans, in previous EJB specifications, called for much complicated code and imposed a heavy resource footprint, and they could be used only on Java EE application servers because of interconnections and dependencies in the source code between beans and DAO objects or persistence frameworks. Thus, many of the features originally presented in third-party persistence frameworks were incorporated into the Java Persistence API, and projects such as Hibernate and TopLink Essentials have become implementations of the Java Persistence API specification.
Related technologies
Enterprise Beans
The EJB 3.0 specification (itself part of the Java EE 5 platform) included a definition of the Java Persistence API. However, developers do not need an EJB container or a Java EE application server 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 (Container-Managed Persistence).
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 (CMP) API. Most products supporting each of the two APIs support the Java Persistence API.
The Java Persistence API specifies persistence only for relational database management system
A relational database (RDB) is a database based on the relational model of data, as proposed by E. F. Codd in 1970.
A Relational Database Management System (RDBMS) is a type of database management system that stores data in a structured for ...
s by focusing on object-relational mapping (ORM). Some JPA providers support other database model
A database model is a type of data model that determines the logical structure of a database. It fundamentally determines in which manner data can be stored, organized and manipulated. The most popular example of a database model is the relatio ...
s, though this is outside the scope of JPA's design. The introduction section of the JPA specification states: "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 database
A flat-file database is a database stored in a file called a flat file. Records follow a uniform format, and there are no structures for indexing or recognizing relationships between records. The file is simple. A flat file can be a plain t ...
s and NoSQL
NoSQL (originally meaning "Not only SQL" or "non-relational") refers to a type of database design that stores and retrieves data differently from the traditional table-based structure of relational databases. Unlike relational databases, which ...
databases, including document database
A document-oriented database, or document store, is a computer program and data storage system designed for storing, retrieving and managing document-oriented information, also known as Semi-structured model, semi-structured data.
Document-orie ...
s, graph database
A graph database (GDB) is a database that uses graph structures for semantic queries with nodes, edges, and properties to represent and store data. A key concept of the system is the graph (or edge or relationship). The graph relates the dat ...
s any many other datastores.
Hibernate
Hibernate, founded by Gavin King, provides an open source
Open source is source code that is made freely available for possible modification and redistribution. Products include permission to use and view the source code, design documents, or content of the product. The open source model is a decentrali ...
object-relational mapping framework for Java
Java is one of the Greater Sunda Islands in Indonesia. It is bordered by the Indian Ocean to the south and the Java Sea (a part of Pacific Ocean) to the north. With a population of 156.9 million people (including Madura) in mid 2024, proje ...
. Versions 3.2 and later provide an implementation for the Java Persistence API. King 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
Sun Microsystems, Inc., often known as Sun for short, was an American technology company that existed from 1982 to 2010 which developed and sold computers, computer components, software, and information technology services. Sun contributed sig ...
stated that ideas came from several frameworks, including Hibernate and Java Data Objects.
Spring Data JPA
The Spring Data JPA is an implementation of the repository abstraction that is a key building block of domain-driven design
Domain-driven design (DDD) is a major software design approach, focusing on modeling software to match a domain according to input from that domain's experts. DDD is against the idea of having a single unified model; instead it divides a large s ...
based on the Java application framework Spring. It transparently supports all available JPA implementations and supports CRUD operations as well as the convenient execution of database queries.
Version history
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 SQL Hints
* Standardization of additional metadata to support DDL generation
* Support for validation
* Shared object cache support.
Vendors supporting JPA 2.0:
* Batoo JPA
* DataNucleus (formerly JPOX)
* EclipseLink
EclipseLink is the open source Eclipse Persistence Services Project from the Eclipse Foundation. The software provides an extensible framework that allows Java developers to interact with various data services, including databases, web services, ...
(formerly Oracle TopLink)
* IBM
International Business Machines Corporation (using the trademark IBM), nicknamed Big Blue, is an American Multinational corporation, multinational technology company headquartered in Armonk, New York, and present in over 175 countries. It is ...
, for WebSphere Application Server
* JBoss with Hibernate
* ObjectDB
* OpenJPA
OpenJPA is an open source implementation of the Java Persistence API specification. It is an object-relational mapping (ORM) solution for the Java language, which simplifies storing objects in databases. It is open-source software distributed un ...
* OrientDB
* Versant Corporation JPA (object database
An object database or object-oriented database is a database management system in which information is represented in the form of objects as used in object-oriented programming. Object databases are different from relational databases which are ...
)
JPA 2.1
Development of JPA version 2.1 began in July 2011 as JSR 338. JPA 2.1 was approved as final on 22 May 2013.
Main features included were:
* Converters, which allow custom code conversions between database and object types
* Criteria update/delete to allow bulk updates and deletes through the Criteria API
* Entity graphs for partial or specified fetching or merging of objects.
* JPQL/Criteria enhancements such as arithmetic subqueries, generic database functions, join ON clause and the TREAT option.
* Schema generation
* Support for stored procedures
Vendors supporting JPA 2.1:
* DataNucleus
* EclipseLink
EclipseLink is the open source Eclipse Persistence Services Project from the Eclipse Foundation. The software provides an extensible framework that allows Java developers to interact with various data services, including databases, web services, ...
* Hibernate
* OpenJPA
OpenJPA is an open source implementation of the Java Persistence API specification. It is an object-relational mapping (ORM) solution for the Java language, which simplifies storing objects in databases. It is open-source software distributed un ...
(from version 2.2.0)
JPA 2.2
Development of JPA 2.2, a maintenance release, began in 2017 under JSR 338. The maintenance review was approved on 19 June 2017.
Main features included were:
* The addition of @Repeatable to all relevant annotations
* Support for JPA annotations to be used in metaannotations
* Streaming for query results
* The ability for AttributeConverters to be CDI-injectable
* Support for Java 8 date and time types
Vendors supporting JPA 2.2:
* DataNucleus (from version 5.1)
* EclipseLink
EclipseLink is the open source Eclipse Persistence Services Project from the Eclipse Foundation. The software provides an extensible framework that allows Java developers to interact with various data services, including databases, web services, ...
(from version 2.7)
* Hibernate (from version 5.3)
* OpenJPA
OpenJPA is an open source implementation of the Java Persistence API specification. It is an object-relational mapping (ORM) solution for the Java language, which simplifies storing objects in databases. It is open-source software distributed un ...
(from version 3.0)
Jakarta Persistence 3.0
The JPA was renamed as Jakarta Persistence in 2019 and version 3.0 was released in 2020. This included the renaming of packages and properties from javax.persistence to jakarta.persistence.
Vendors supporting Jakarta Persistence 3.0:
* DataNucleus (from version 6.0)
* EclipseLink
EclipseLink is the open source Eclipse Persistence Services Project from the Eclipse Foundation. The software provides an extensible framework that allows Java developers to interact with various data services, including databases, web services, ...
(from version 3.0)
* Hibernate (from version 5.5)
* OpenJPA
OpenJPA is an open source implementation of the Java Persistence API specification. It is an object-relational mapping (ORM) solution for the Java language, which simplifies storing objects in databases. It is open-source software distributed un ...
(from version 4.0)
Jakarta Persistence 3.1
Version 3.1 was released in 2022. It is part of Jakarta EE 10, and thus requires at least Java 11 to run. It adds better UUID handling, various new JPQL functions for math and date/time handling, and other small changes.
Vendors supporting Jakarta Persistence 3.1:
* DataNucleus (from version 6.0)
* EclipseLink
EclipseLink is the open source Eclipse Persistence Services Project from the Eclipse Foundation. The software provides an extensible framework that allows Java developers to interact with various data services, including databases, web services, ...
(from version 4.0)
* Hibernate (from version 6.0)
* OpenJPA
OpenJPA is an open source implementation of the Java Persistence API specification. It is an object-relational mapping (ORM) solution for the Java language, which simplifies storing objects in databases. It is open-source software distributed un ...
(from version 4.0)
Jakarta Persistence 3.2
Version 3.2 was released in 2024. It introduced a large number of API improvements along with some improvements to the query language.
Vendors supporting Jakarta Persistence 3.2:
* EclipseLink
EclipseLink is the open source Eclipse Persistence Services Project from the Eclipse Foundation. The software provides an extensible framework that allows Java developers to interact with various data services, including databases, web services, ...
(from version 5.0)
* Hibernate (from version 7.0)
See also
* .NET Persistence API (NPA)
* JDBC
Java Database Connectivity (JDBC) is an application programming interface (API) for the Java (programming language), Java programming language which defines how a client may access a database. It is a Java-based data access technology used for Java ...
References
Further reading
*
External links
General info
*
Documentation for the final version of the EJB3 spec (called JSR220)
GlassFish's Persistence page
Tutorials
Jakarta EE Specification Guide - Persistence Explained
Jakarta EE Starter Guide - How to Store and Retrieve Data Using Jakarta Persistence
{{DEFAULTSORT:Jakarta Persistence
Java APIs
Java enterprise platform
Java specification requests
Object–relational mapping
Persistence