Most of our Java-based web-applications store their data in a relational database such as Oracle, PostgreSQL, MySQL, MariaDB or MS SQLServer. The standard way to access and modify the data is using an object-relational mapping as specified by the Java Persistence API (JPA). Over the years JPA has become a mature specification and there are a couple of JPA implementations with strong support such as Hibernate, EclipseLink, OpenJPA and DataNuclues. However, day-to-day project experience demonstrates there are number of pitfalls you might run into when using JPA.

To avoid stumbling into the same pitfall again and again, we collected them with their solutions and presented these pairs of problems and solutions. This is a start of a series of blog articles each describing a pitfall and a way to circumvent it.
For every pitfall, there is a description and an executable code example. You find all the code examples here: https://github.com/akquinet/jpapitfalls.git.
We have four categories of pitfalls. Each new pitfall will be added as a new list item:
- Object-relational mapping and relationships
- Object-relational mapping and inheritance
- JPQL queries such as unexpected query results
- Runtime issues such as lost updates or performance issues
We first start with a pitfall called: “Serialized Collection“