High-Performance Java Persistence Newsletter, Issue 39
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
The pick of this edition is this article which explains how you should prepare your project for an upgrade to Spring Boot 3. Every time I’m running my High-Performance Java Persistence training, I ask what Java frameworks the students are using, and Spring Boot is the answer for at least 70% of them. With Spring Boot 3, you need to use at least Java 17, and that’s a great way to increase the adoption of the newer Java version.
Another article I enjoyed reading is this one which provides insight into the undo log structure of MySQL and how you can investigate performance problems related to long-running transactions using the MySQL History List Length or HLL.
Some people prefer writing Twitter threads to articles, and here’s one very good Twitter story I read recently. It’s about the cost of updating JSONB columns in PostgreSQL.
Speaking of PostgreSQL, you should really need to know how TOAST works in PostgreSQL. Here’s a great article about TOAST if you’re interested in this topic.
Best Tweets
Here are the best tweets I posted since the last newsletter:
Software development is the art of replicating the non-standard architecture choices made by Google, Facebook, or Netflix into trivial projects with modest requirements.
— Vlad Mihalcea (@vlad_mihalcea) May 17, 2022
17 years of working in the software industry taught me that Keeping It Simple applies to more than just software.
— Vlad Mihalcea (@vlad_mihalcea) May 8, 2022
Once you fully understand it, it will change your perspective about many aspects if you life.
When sending an SQL query to a DB, the query just tells what the client needs. Then, the database figures out what's the least expensive plan to achieve that goal.
— Vlad Mihalcea (@vlad_mihalcea) May 18, 2022
Ideally, that's exactly how software should be built too! Be like the database!
It will take several years for Java 8 to lose its massive market share. pic.twitter.com/FY2ByxC4xf
— Vlad Mihalcea (@vlad_mihalcea) May 23, 2022
Big companies use boring tech too. Blocking API, monolith, relational databases, SQL.
— Vlad Mihalcea (@vlad_mihalcea) May 9, 2022
New things are tried, but they don't always become the norm.https://t.co/S4fUaseNMH pic.twitter.com/NTe0MWFov8
Online Workshop Recording
On the 25th of May, I ran a free online workshop about tunning Spring Boot production systems with the help of Lightrun, and it was a blast.
If you haven’t had the chance to attend the event, then you can check out the video recording.
Project Releases
PostgreSQL 15 has arrived! It provides faster sorting and better support for SQL/JSON, like JSON_ARRAY
, JSON_OBJECT
, or JSON_TABLE
functions.
The 42.3.6 version of the PostgreSQL JDBC Driver has been released too.
If you’re using SQL Server, then you can now upgrade to the 10.2.1 version of the JDBC Driver.
The 6.0.2 version of Hibernate ORM has been released. I’ve been using it in my High-Performance Java Persistence repository, and it provides some really cool features I’m really looking forward to writing about in the second edition of my book.

Get in touch with my latest articles!
StackOverflow Answers
The following StackOverflow answers have been trending since the last newsletter episode:
- Mapping Java boolean to Oracle Number column with JPA and Hibernate
- How to fix the “
org.hibernate.resource.jdbc.internal.LogicalConnectionManagedImpl
is closed” issue - The best way to use a DB table as a job queue (a.k.a batch queue or message queue)
- Hibernate returns null for entity property that is annotated with
@Formula
after saving the entity - How to solve the “failed to lazily initialize a collection of role” Hibernate exception