Understanding JPA, Part 1: The object-oriented paradigm of data persistence

Build a wall between data persistence and your Java code

Like it or not, data is an integral part of any application, even cool object-oriented ones. Everything stops at the persistence layer, where Java developers traditionally have had to write complex SQL queries, which can become unmanageable as the application grows. How good it would be if you could just treat these queries as objects, and apply object-oriented programming concepts like encapsulation, abstraction, inheritance, and polymorphism to them! With such an abstraction, you could hide the complexity of the underlying data store.

In fact, the Java community has produced numerous object-oriented approaches to data persistence: EJB, JDO, Hibernate, and Toplink are all worthy solutions that have tackled this problem. The Java Persistence API, or JPA, is a standard persistence API introduced as part of the Java EE 5 platform. The JPA specification was first introduced as part of JSR 220: EJB 3.0, with the goal of simplifying the EJB entity beans programming model. Although it all started with entity beans and is packaged with Java EE 5.0, JPA can be used outside the container in a Java SE environment.

In this article, you will see how elegantly data persistence can be handled in an object-oriented manner just with the help of JPA annotations. The article is intended for readers new to JPA who understand the basic concepts of relational database management systems and are familiar with Java 5 annotations. JPA requires Java 5 or higher, as it makes heavy use of new Java language features such as annotations and generics.

OpenJPA and the example application

Concepts in this article are explained and demonstrated using OpenJPA, an open source JPA implementation from Apache. I chose OpenJPA over other vendor products because it has been integrated with the Weblogic, WebSphere, and Geronimo application servers.

The remainder of this article will explore various object-oriented JPA concepts with a sample application that implements functionality for a simple development scenario. Imagine there's a superstore called XYZ with both an online and retail customer base. To begin, you will see how to apply CRUD operations to this customer model using JPA. In the later sections, you'll see how you can extend the CRUD operations using object inheritance -- the JPA way.

The code package for this article includes sample code for entity listeners and all three inheritance types (single table, joined, and table per class) discussed in the article, implemented in the context of the example application.

1 2 3 4 5 6 Page 1
Page 1 of 6
How to choose a low-code development platform