Mastering Java Persistence API (JPA): Realize Java's Capabilities Spanning RDBMS, ORM, JDBC, Caching, Locking, Transaction Management, and JPQL
()
About this ebook
The book begins with the ideas like ORM, EJB CMP, and the difficulties associated with data conversion from a database to an application and vice versa are handled spontaneously. The book discusses Table, Row, Column, Cell, and various forms of Relationships and progress sequentially through the JPA concepts. It also discusses database processes such as identity generation, sequencing, locking, querying, persisting, caching, and transaction management in detail and emphasizes how JPA handles them. Further, the book covers the architecture and setup of two of the most extensively used JPA provider implementations (Hibernate and EclipseLink) in detail.
Additionally, this book includes sample functioning code for connecting to a MySQL database.
Each JPA functionality is illustrated with a code snippet, making it easier to modify these features as the application develops. This book teaches both beginners and seasoned professionals how to integrate JPA concepts in their employment through numerous problems and answers spanning each of the topics.
Related to Mastering Java Persistence API (JPA)
Related ebooks
Java Hibernate Cookbook: Over 50 recipes to help you build dynamic and powerful real-time Java Hibernate applications Rating: 0 out of 5 stars0 ratingsMastering Hibernate Rating: 0 out of 5 stars0 ratingsMockito for Spring Rating: 0 out of 5 stars0 ratingsNode.JS Guidebook: Comprehensive guide to learn Node.js Rating: 0 out of 5 stars0 ratingsJAVA Programming Simplified: From Novice to Professional - Start at the Beginning and Learn the World of Java Rating: 0 out of 5 stars0 ratingsJava 8 to 21: Explore and work with the cutting-edge features of Java 21 (English Edition) Rating: 0 out of 5 stars0 ratingsNode.js Design Patterns - Second Edition Rating: 4 out of 5 stars4/5Java 9 Concurrency Cookbook - Second Edition Rating: 0 out of 5 stars0 ratingsRESTful Java Web Services Interview Questions You'll Most Likely Be Asked: Second Edition Rating: 0 out of 5 stars0 ratingsSpring Essentials Rating: 0 out of 5 stars0 ratingsSpring Boot and Single-Page Applications: Securing Your API with a Single-Page Application Frontend - Second Edition Rating: 0 out of 5 stars0 ratingsSpring Data Rating: 0 out of 5 stars0 ratingsJava and Java EE Interview Preparations Rating: 0 out of 5 stars0 ratingsJava Multithreading Interview Questions And Answers Rating: 0 out of 5 stars0 ratingsMastering JavaScript Design Patterns Rating: 4 out of 5 stars4/5Spring Boot 2: How To Get Started and Build a Microservice - Third Edition Rating: 5 out of 5 stars5/5Testing with JUnit Rating: 0 out of 5 stars0 ratingsLearning Angular for .NET Developers Rating: 0 out of 5 stars0 ratingsStep-by-Step Angular Routing: Learn To Create client-side and Single Page Apps with Routing and Navigation Rating: 0 out of 5 stars0 ratingsSoftware Design Patterns for Java Developers: Expert-led Approaches to Build Re-usable Software and Enterprise Applications Rating: 0 out of 5 stars0 ratingsUltimate Typescript Handbook: Build, scale and maintain Modern Web Applications with Typescript Rating: 0 out of 5 stars0 ratingsCode with Java 21: A practical approach for building robust and efficient applications (English Edition) Rating: 0 out of 5 stars0 ratingsJava Coding Problems: Improve your Java Programming skills by solving real-world coding challenges Rating: 0 out of 5 stars0 ratingsJavaScript JSON Cookbook Rating: 0 out of 5 stars0 ratingsQuick Start Kubernetes Rating: 0 out of 5 stars0 ratings
Computers For You
The ChatGPT Millionaire Handbook: Make Money Online With the Power of AI Technology Rating: 4 out of 5 stars4/5Alan Turing: The Enigma: The Book That Inspired the Film The Imitation Game - Updated Edition Rating: 4 out of 5 stars4/5Deep Search: How to Explore the Internet More Effectively Rating: 5 out of 5 stars5/5Mastering ChatGPT: 21 Prompts Templates for Effortless Writing Rating: 4 out of 5 stars4/5CompTIA Security+ Get Certified Get Ahead: SY0-701 Study Guide Rating: 5 out of 5 stars5/5The Self-Taught Computer Scientist: The Beginner's Guide to Data Structures & Algorithms Rating: 0 out of 5 stars0 ratingsSQL QuickStart Guide: The Simplified Beginner's Guide to Managing, Analyzing, and Manipulating Data With SQL Rating: 4 out of 5 stars4/5How to Create Cpn Numbers the Right way: A Step by Step Guide to Creating cpn Numbers Legally Rating: 4 out of 5 stars4/5Creating Online Courses with ChatGPT | A Step-by-Step Guide with Prompt Templates Rating: 4 out of 5 stars4/5Elon Musk Rating: 4 out of 5 stars4/5The Innovators: How a Group of Hackers, Geniuses, and Geeks Created the Digital Revolution Rating: 4 out of 5 stars4/5Standard Deviations: Flawed Assumptions, Tortured Data, and Other Ways to Lie with Statistics Rating: 4 out of 5 stars4/5Data Analytics for Beginners: Introduction to Data Analytics Rating: 4 out of 5 stars4/5The Professional Voiceover Handbook: Voiceover training, #1 Rating: 5 out of 5 stars5/5CompTia Security 701: Fundamentals of Security Rating: 0 out of 5 stars0 ratingsBecoming a Data Head: How to Think, Speak, and Understand Data Science, Statistics, and Machine Learning Rating: 5 out of 5 stars5/5Procreate for Beginners: Introduction to Procreate for Drawing and Illustrating on the iPad Rating: 5 out of 5 stars5/5CompTIA IT Fundamentals (ITF+) Study Guide: Exam FC0-U61 Rating: 0 out of 5 stars0 ratingsUncanny Valley: A Memoir Rating: 4 out of 5 stars4/5The Hacker Crackdown: Law and Disorder on the Electronic Frontier Rating: 4 out of 5 stars4/5The Insider's Guide to Technical Writing Rating: 0 out of 5 stars0 ratingsComputer Science I Essentials Rating: 5 out of 5 stars5/5Tor and the Dark Art of Anonymity Rating: 5 out of 5 stars5/5Microsoft Azure For Dummies Rating: 0 out of 5 stars0 ratingsLearning the Chess Openings Rating: 5 out of 5 stars5/5
Reviews for Mastering Java Persistence API (JPA)
0 ratings0 reviews
Book preview
Mastering Java Persistence API (JPA) - Nisha Parameswaran Kurur
Section - I
Introduction
CHAPTER 1
Java Persistence API and Object-Relational Mapping
Introduction
In 1991, James Gosling, Mike Sheridan and Patrick Naughton, a team of Sun engineers, initiated a project to develop a simple, robust, portable, platform-independent, object-oriented, multi-threaded, high performance, interpreted language that can be used for small, embedded systems. Since the team was named Green, the language was initially named Greentalk. Considering its similarity in name to Smalltalk, it was renamed to Oak, as it is considered as a symbol of strength. As this name was already trademarked by Oak technologies, James Gosling chose the name Java while drinking a cup of coffee (Java is the brand name as well as the name of the island in Indonesia where the first coffee was produced).
The first release of Java was in 1995 by Sun Microsystems as a free, platform-independent, object-oriented, application programming language. This was considered as one among the 10 best products of 1995. However, the stable release of Java (JDK 1.0) happened in Jan 1996. Java’s popularity grew as one of the best choices for web application programming, and this association of Java with "Internet" was due to the Applet feature that could be embedded onto a web page and run on a browser. Being free, the availability of source code enabled Java to be adopted by many companies, and hence its growth fostered from being client-side applets to the standard server-side language. Java Enterprise Edition (JEE) is an open enterprise software platform that provides a standard model for server applications that can be run on almost all Java-compatible Enterprise products. Using JEE, developers can easily adapt to the increasing and greater demands in the IT industry without incurring extensive additional costs.
Few of the main technologies that make up the JEE are as follows:
Java Servlets
JavaServer Pages (JSP)
Enterprise JavaBeans (EJB)
Java Message Service (JMS)
Java Naming and Directory Interface (JNDI)
Java Database Connectivity (JDBC)
JavaMail
Java Transaction Service (JTS)
Java Transaction API (JTA)
J2EE Connector Architecture (J2EE-CA, or JCA)
Enterprise Java Beans (EJB) is a major part of the J2EE specification, and defines a model for building server-side, reusable components. There are three types of enterprise beans currently supported by J2EE—session beans, message-driven beans, and entity beans. Session beans are used for sharing information among clients of the application. Message-driven beans are used for asynchronous execution based on messages from message-oriented middleware. Entity beans are used to model persistent business objects particularly data in database.
The need to connect to databases in an object-oriented manner led to the popularity of JPA, which allows the programmer to seamlessly integrate any database with the application without worrying about the underlying database driver or query language details.
This chapter mostly discusses the different aspects of persistence, databases and reasons that led to the development and acceptance of JPA/ORM. This discussion is necessary in order to set the background for the rest of the book.
Structure
This chapter discusses the following:
Java persistence mechanisms
Types of databases
Object-Relational definitions
Object-Relation Model
Object-Relational Mapping
Object-Relational Impedance Mismatch
Java Persistence API
History of JPA
Other Java persistence specifications
Advantage of JPA/ORM
Persistence products
Objectives
This chapter will bring out to the reader the Java persistence technologies, types of databases, and object-relational definitions, and its impact on program development. You will also learn about JPA and other persistence specifications in Java, and the JPA provider implementation comparison study.
Java Persistence
Persistence of data, in computer science, is describing data that outlives the process that created it. In Java, persistence is about storing any application-related data to any level and retrieving it when required. Java data includes strings, numbers, dates, byte arrays, images, XML, and Java objects.
There are many ways of data persistence that are commonly used in Java. A few of them are as follows:
File Input Output (IO): File IO is mainly used to persist data in file system of the underlying operating system as files. Mostly string data or primitive data is stored into files. All the file contents are read/written as sequence of data called streams, which consists of bytes. Java objects are stored into files using a technique called serialization which is explained as follows.
Serialization: Serialization is used to make the state of an object persistent. This means that the state of the object is converted to a stream of bytes and stored into a file. Whenever this is required, the reverse process (deserialization) is done and the object is recreated.
Java Database Connectivity (JDBC): JDBC is mainly used for connecting JEE applications to database. This is the basic underlying technology used by most of the Java applications to store and retrieve data from the database (DB).
Java Connector Architecture (JCA): Java Connector Architecture is a more generic standard for connecting to any Enterprise Information System (EIS). It can be a database or any other system like Siebel Systems, SAP AG, Oracle applications, and so on.
Java Data Objects (JDO): JDO is a general specification for Java object persistence. Applications that use JDO are independent of the underlying database and can be easily migrated from one type of database to another type of database. JDO implementations support many data stores like relational and object databases, XML, flat files, LDAP, ODF formats, MS-Excel formats, and so on. This was mainly part of the Sun specifications that was later donated to Apache foundation.
Service Data Objects (SDO): SDO is a specification to manage the processing of data in service-oriented architecture (SOA) from heterogeneous sources like XML documents, relational databases, web-services, and so on. This was originally developed in 2004 as a joint collaboration between Oracle (BEA) and IBM.
Enterprise Java Bean (EJB): EJB has many categories of beans out of which Entity beans are used for data persistence in Java applications. Two types of persistence are seen in Entity beans—Bean Managed Persistence (BMP) and Container Managed Persistence (CMP). BMP allows the entity bean to manage and implement all the operations directly with the help of persistence operations (ex: JDBC, JDO, SDO). However, as name suggests, with CMP, the EJB container implicitly manages the persistent state. The developer need not worry about the database access and related functions while using this kind of persistence. Java Persistence API (JPA) was defined as part of this kind of persistence.
Databases
In simple terms, a database is nothing but a program that stores data. This can be done in many ways and different kinds of data can be stored in these databases. Different types of databases are listed as follows:
Object databases: Object databases have their information represented as objects. Since Java is an object-oriented language, storing data and retrieving them as objects becomes a natural and common way to do. But these database management systems did not achieve much success when compared to relational databases.
XML databases: XML databases allow data to be specified, stored and retrieved in XML formats. The data can be queried, transformed, exported, and returned to another system in XML form. This is a kind of document-oriented database that is in turn a category of NoSQL databases.
NoSQL databases: NoSQL or non-SQL or non-relational database equips itself with storage and retrieval of data which is in a different format other than the tabular relations. The data can be in any format like XML, JSON, etc. Additionally, NoSQL database does not require a structured schema definition for data storage.
Relational databases: Although there are many kinds of databases, relational databases remain to dominate the industry even though it is a relatively old technology. In this model, data is organized into tables of columns and rows. Each row is identified with a unique key. Rows are called tuples or records, whereas columns are called attributes. Each table represents an entity, whereas each row in the table is a particular instance of that entity, and columns describe the attributes of that particular instance. There had been many attempts to replace relational model first with object-oriented, then object-relational and finally XML databases, none of these models achieved much success and relational databases still remain overwhelmingly the dominant database model.
The data in the application is based on Java objects, whereas the data in the database is based on table-row-column relational model. Java Persistence API (JPA) is an attempt to help developers conquer this challenge with ease.
Object-Relational Definitions
With the growth of object-oriented languages for application development, programmers started thinking of mapping relational and object-oriented models for the ease and clarity of implementation and hence, Object-Relational Model as well as Object-Relational Mapping became frequently used terminologies. Also, the mismatch between these two models also posed a few limitations while using them. The following sections describe about the model, the mapping, and the mismatch.
Object-Relational Model
Object-Relational Model is a design that provides object-oriented features integrated to a relational database. This allows the developer to integrate their object-oriented code with datatypes and methods to the database with ease. The Nordic Object/Relational Database Design¹ is an example proposal for this kind of database. The objective of this kind of database is more power, greater flexibility, better performance, and greater data integrity than its predecessors (either relational or object-oriented as this is a hybrid technology).
Object-Relational Mapping
Object-Relational Mapping (ORM) is a programming technique that helps in converting data from different incompatible type systems to objects for the ease of manipulation by object-oriented languages. This reduces the burden of the developer to convert existing object values to simpler forms to be stored into the database.
With relational databases being used widely, table-row-column model makes the data manipulation tedious for the programmer. ORM is a boon, as the coding is also reduced and the programmer can increase productivity by applying the logic in an object-oriented way without worrying about the actual row-column format of the relational database.
In this text, the mapping technique will be discussed in further detail as this know-how will make the understanding of JPA evident.
Object-Relational Impedance Mismatch
An Object-Relational Impedance Mismatch² relates to the problems that occur while representing data from relational databases in object-oriented languages. This term is used as an analogy from electrical engineering, where impedance matching is important in any optimal circuit design to have maximum power flow³. Here, the impedance mismatch causes a difficulty in the flow of data in the application when accessing a relational database by an object-oriented language.
Basically, object-oriented concepts are based on software engineering fundamentals, whereas relational-model concepts are based on proven principles of mathematics. These theoretical differences form a non-ideal combination with a few hitches.
Conceptual differences
Many concepts in object-oriented (OO) are totally against the concepts in relational model. Encapsulation allows the object’s internal representation to be kept hidden, whereas Object-Relational Model exposes the underlying content of an object to interact with an interface not specified by the object implementation itself.
Access specifiers in relational model is not as important as in object-oriented. Similarly, classifications and characteristics of the various attributes in these two models conflict in their relative as well as absolute natures.
Classes, inheritance, and polymorphism are not supported by relational model, whereas these are the basic principles of object-oriented design. Interfaces are the only access to the internals of an object in object-oriented paradigm. But, in relational world, views provide alternating perspectives.
Data type differences
The relational model has all the rows as immutable, which means it strictly prohibits by-reference attributes (only exception is in case of foreign keys where cross-reference columns are used). But in OO, it expects by-reference to be the standard behavior. Any attribute can have a reference to yet another object at any level.
Also, the types of scalar data differ between database and OO languages. For ex., VARCHAR (10) is a way to describe a string in a database column definition which strictly restricts the string size to 10. But in case of a string in Java, no length is mentioned and hence, this restriction in the column size goes unnoticed in the application code, if additional effort is not taken by the developer.
Another simple yet unnatural difference is the way data in the database system is treated by the querying mechanisms (SQL vs OO language). For example, SQL systems mostly ignore the trailing white spaces while comparing values, whereas OO language string comparison does not do that.
Data handling differences
Relational model has well-defined and relatively small set of primitive operations for the query and usage of data. In OO languages, data querying and manipulation are done via custom-built imperative operations that may result in changing the state of the entity itself.
Relational design is mainly based on unique tuples (or rows) that provide set-based operations, whereas OO languages deal with list-based/map-based operations making the data handling dissimilar.
Data Composition Differences
In OO, objects can be formed from many objects to a high degree or can be a specialization of a generic definition. Relations, however, are tuples (rows) with the same headers (column names), and do not have an ideal counterpart in OO languages.
Transactional differences
Transaction is the smallest unit of work performed by a database. Relational transactions are much larger than any other operation performed by classes in OO languages. Transactions can have multiple sets of data manipulations, whereas in OO languages they are constrained to individual assignments to primitive-typed fields. Isolation, durability, atomicity, and consistency are important to transactional data, whereas this is ensured only to the primitive-typed fields in case of OO transactions.
Integrity differences
The relational model requires declarative constraints on the scalar types, attributes, relational variables, and databases as a whole. In case of OO languages, no such constraints are explicitly declared but exceptions are raised while trying to operate on an encapsulated internal data.
Solution for Mismatch
When different systems are employed, mismatch is bound to happen. So, the first step would be to recognize the problem and either minimize or compensate it. Frameworks that use the minimization technique at runtime dynamically correlate a row in the dataset to an entity instance. While coding statically, the entity class is correlated to the relation in the dataset. This helps in achieving a few advantages like:
smaller code size and faster compilation
schema can be changed dynamically with changing the correlation in the code
domain data can be accessed at higher levels in a straight-forward manner for presentation, transportation, as well as validation
complex mapping avoidance
constraint checking can be done
And also, a few disadvantages such as:
possible performance cost of runtime construction and access
cannot make use of OO principle like polymorphism
Another way is to use non-relational databases as this impedance mismatch, as the name suggests, occurs only when using with relational models. NoSQL databases or XML databases can be used as alternate databases to relational ones. However, migrating an existing relational database to a non-relational database is also a mammoth task.
Java Persistence API (JPA)
Java provides specifications to make sure that all who uses this specification feature should understand what will be available for the user. However, these specifications don’t limit the implementer and give freedom on how this feature can be achieved. JPA is one such specification that is used for accessing, persisting, and managing data between Java objects/classes and a relational database. JPA was defined as part of the EJB 3.0 specification as a replacement for the EJB 2 CMP Entity Beans specification.
JPA became so popular that it is now considered the standard industry approach for Object to Relational Mapping (ORM) in the Java Industry. Note that it is a set of definitions, or in java terms, a set of interfaces. It requires an implementation to perform actual persistence or data management. There are many JPA implementations, both open-source as well as commercial, and any JEE application server should support its use since these implementations adhere to the Java specification.
Layers in JPA based Java app
The figure given below (Figure 1.1) depicts the layers that clearly indicate how JPA accomplishes the task of preparing the application to be independent of the database or the provider. This figure also provides a list of JPA providers as well as JDBC drivers available in the market.
The main attraction of JPA is that it empowers Plain Old Java Objects (POJO) to be easily persisted without any extra implementations or methods when compared to EJB 2 CMP. This allows an object to be mapped to a database table via Object-Relational Mappings described using standard annotations or XML configurations.
Figure 1.1: Various layers in a java application that uses JPA.
A runtime entity manager API is specified by JPA that takes care of processing queries and transaction on the objects. JPA defines an object-level query language JPQL to query data from the database in form of objects.
History of JPA
JPA is the latest of several Java persistence specifications.
The first Java persistence specification was the Object Management Group (OMG) persistence service Java binding, which did not become successful. There are rarely any commercial products supporting this specification.
The next one was EJB 1.0 CMP Entity Beans, which was very successful in being adopted by the big Java EE providers (BEA, IBM), but the response against the specification requirements for Entity Beans was that they were overly complex and with a poor performance.
EJB 2.0 CMP tried to reduce some of the complexity of Entity Beans by local interfaces, but the majority of the complexity remained. EJB 2.0 also lacked portability as the deployment descriptors defined for the mapping were all proprietary. This influenced in creating another Java persistence specification, Java Data Objects (JDO).
JDO was adopted by several independent vendors such as Kodo JDO, and several open-source implementations, but never had much success with the big Java EE vendors.
Although, by now there were two competing Java persistence standards (EJB CMP and JDO) in the market, the majority of the users still preferred to continue using proprietary API solutions like TopLink, Hibernate, and so on. The TopLink product was acquired by Oracle from WebGain, booming its usage on the Java EE community.
EJB CMP complexity led to the EJB 3.0 specification with the main goal of reducing complexity and hence JPA was defined. This specification was meant to unify the EJB 2.0 CMP, JDO, Hibernate, and TopLink APIs, and products and have been successful in doing so.
Most of the persistence vendors have released JPA implementations confirming to its adoption by the industry and the users. Following are a few examples:
Hibernate⁴ (acquired by JBoss which was later acquired by Red Hat)
TopLink⁵ (acquired by Oracle)
EclipseLink⁶ (Eclipse-based implementation of TopLink)
KodoJDO⁷ (acquired by BEA which was later acquired by Oracle)
Cocobase⁸ (owned by Thought Inc.)
Java Persistence Objects – JPOX⁹ (available on sourceforge.net)
DataNucleus¹⁰ (available on GitHub)
Even though JPA is considered as a widely accepted specification, there are many other persistence specifications as well that are being used. The next section describes