High-Performance Java Persistence Newsletter, Issue 19
Imagine having a tool that can automatically detect JPA and Hibernate performance issues. Wouldn’t that be just awesome?
Well, Hypersistence Optimizer is that tool! And it works with Spring Boot, Spring Framework, Jakarta EE, Java EE, Quarkus, or Play Framework.
So, enjoy spending your time on the things you love rather than fixing performance issues in your production system on a Saturday night!
Introduction
Welcome to a new issue of the High-Performance Java Persistence Newsletter in which we share articles, videos, workshops, and StackOverflow answers that are very relevant to any developer who interacts with a database system using Java.
Articles
Last week, I published a 7-year anniversary post. I can’t believe it’s been seven years since I started writing this blog. How time flies when you are having fun!
Vijay Garg published an article about using the PostgreSQL LISTEN
and NOTIFY
mechanism with JDBC.
The Hibernate Types project makes it very easy to map JSON or ARRAY with Hibernate. However, if you’re using EclipseLink, you need a different solution, and this article shows how you can achieve this goal.
Hibernate is very flexible, allowing you to get access to the underlying JDBC Connection
so that you can run any JDBC-based operation. In this article, I’m showing you how you can use the doWork
and doReturningWork
Hibernate Session
methods.
PostgreSQL 13 has been released and brings many interesting features. This article goes through various enhancements and explains how they work and when you should use them.
A very good article I read is this one written by Haki Benita about implementing an anomaly detection mechanism using plain SQL.
If you’re using PostgreSQL and what to learn how the HOT (Heap Only Tuple) UPDATE works, then this article offers you a very nice introduction.
Martin Fowler published an article about data visualization options, like histograms, density, or box plots that can help you avoid the mistake of comparing only average numbers.
Podcasts
Adam Bien has published the #103 podcast episode in which we are talking about our software developer journeys and offer career advice for anyone interested in becoming a freelancer.
All in all, it was a great podcast, and I hope you find it as enjoyable as Adam and I did.
Java Data Access Framework Polling Results
Last week, I ran a Java data access vendor survey on Twitter, and almost 2500 participants cast their votes:
Poll time!
— Vlad Mihalcea (@vlad_mihalcea) September 29, 2020
What @Java data access framework you are using?
More options in the following tweet!
Considering that my audience consists of many developers using JPA and Hibernate, there’s no wonder that the JPA and Hibernate option got the vast majority of votes. However, running such a survey is useful as it allows me to know what my audience is using so that I can cover topics that are relevant to them. So, even if the results don’t necessarily reflect the absolute market share standings, it’s still can capture the latest trends among your particular audience.
The jOOQ frameworks got more and more traction, and it scored better than MyBatis and QueryDSL combined.
Because Twitter polls are limited to 4 options only, I added a subsequent another poll to the original one about other JDBC-based frameworks, and over 700 people voted:
More options
— Vlad Mihalcea (@vlad_mihalcea) September 29, 2020
It looks like Spring Data JDBC is getting good traction, so I should definitely cover it in the future.
Workshop Recording
I managed to edit and publish the Caching Best Practices workshop which offers over 1:45 hours of video lessons that will help you get a better understanding of database caching, application-level caching, and the Hibernate second-level cache.
So, if you are interested in this topic, then check it out on Teachable.
Best Tweets
There are many social media platforms, but for me, Twitter is the one I like best. Here are the best tweets I posted since the last newsletter:
The best teams I've ever worked on were not made of 10x developers who knew everything, but of developers that were kind, funny, humble and professional.
— Vlad Mihalcea (@vlad_mihalcea) October 6, 2020
The most useful technical skill I learned as a developer does not involve new programming languages, clever algorithms or fancy data structures.
— Vlad Mihalcea (@vlad_mihalcea) September 27, 2020
It was to write effective unit and integration tests.
5 years ago today I quit my job in order to write my High-Performance Java Persistence book and, maybe, do some part-time consulting work.
— Vlad Mihalcea (@vlad_mihalcea) October 1, 2020
It was a leap of faith, but I'm glad I took it.
You don't need to work overtime to release high-quality software products on time.
— Vlad Mihalcea (@vlad_mihalcea) October 7, 2020
Pro tip: If you are setting a @PostgreSQL or @MySQL server for testing or production, then never use the default settings because those are meant for personal computers or notebooks.
— Vlad Mihalcea (@vlad_mihalcea) September 28, 2020
For example, you need to increase the MySQL Buffer Pool or the PostgreSQL Shared Buffers.
Project Releases
PostgreSQL 13 has been released with support for parallel vacuuming, B-Tree index data deduplication, extended statistics, and many many more other features. For more details, check out the official announcement.
I have the pleasure to announce that the 2.10 version of the Hibernate Types project has been released. If you are using JPA and Hibernate, this project is going to help you get the most out of your relational database system.
Hibernate ORM released the 5.4.22 version. For a list of changes, check out the release notes.

Get in touch with my latest articles!
StackOverflow Answers
The following StackOverflow answers have been trending over the past two weeks:
- Why use JPA instead of directly writing the SQL query using JDBC?
- What is the purpose of the Hibernate
ReturningWork
interface? - How to limit the results on a SQL query
- How to encrypt data with Hibernate to prevent accessing column values
- How does
Hibernate.initialize()
work - How to map array with Hibernate