JPA Overview

The Java Persistence API (JPA) is a Java specification for accessing, persisting, and managing data between Java objects / classes and a relational database.

JPA (Java Persistence API) is an interface for persistence providers to implement.
Hibernate is one such implementation of JPA. When you use Hibernate with JPA you are actually using the Hibernate JPA implementation. JPA typically defines the metadata via annotations in the Java class. Alternatively via XML or a combination of both. A XML configuration overwrites the annotations.

JPA implementations:


  • Hibernate:The most advanced and widely used. Pay attention for the classpath because a lot of libraries are used, especially when using JBoss. Supports JPA 2.1.
  • Toplink: Only supports the basic JPA specs. (This was oracle’s free version of the JPA implementation)
  • EclipseLink: Is based on TopLink, and is the intended path forward for persistence for Oracle and TopLink. Supports JPA 2.1
  • Apache OpenJPA: Best documentation but seems very buggy. Open source implementation for JPA. Supports JPA 2.0
  • DataNucleus: Well documented, open source (Apache 2 license), is also a JDO provider. Supports JPA 2.1
  • ObjectDB: well documented
  • Other approaches are:


  • Plain JDBC
  • ORM with Hibernate: Hibernate is now also very supportive for JPA
  • iBatis: The project moved to MyBatis
  • JDO
  • Motivation for Hibernate as JPA choice:


  • Mature project:
  • Useful Hibernate sub projects
  • Active community