High-Performance Java Persistence Newsletter, Issue 47
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!
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.
The pick of this edition is this article that not only explains how B+Tree indexes work in PostgreSQL, but it provides an OSS tool to help you visualize them.
Speaking of PostgreSQL, this article explained why it would be useful if PostgreSQL supported Transparent Database Encryption (TDE).
If you are using Spring or Spring Boot, then you are better off using the
BaseJpaRepository from the Hypersistence Utils project instead of the default Spring Data
JpaRepository. For more details about this topic, check out this article.
If you are using MySQL, then check out this article about the effect of network bandwidth on database performance. What’s nice about this article is that you can spot the Universal Scalability Law in the performance charts.
Related to MySQL, it’s worth reading this article about the overhead of COMMIT in RDS or Aurora MySQL versions.
Another good article I read was this one about LSM-Tree merging in YugabyteDB.
Related to YugabyteDB, I also wrote two articles about it:
I uploaded a new video on YouTube about the best way to detect performance issues in JPA and Hibernate applications:
This video is part of a series of videos about optimizing Java applications using the amazing Hypersistence Optimizer.
Here are the best tweets I posted since the last newsletter:
Applying the StackOverflow solution to your project pic.twitter.com/Q5bgo1eMef— Vlad Mihalcea (@vlad_mihalcea) January 15, 2023
Architecture Pitfalls: Don’t use your ORM entities for everything — embrace the SQL!https://t.co/JVEsWT5QM8 pic.twitter.com/KthFueCwXa— Vlad Mihalcea (@vlad_mihalcea) January 13, 2023
The best way to use the Spring Transactional annotation— Vlad Mihalcea (@vlad_mihalcea) January 1, 2023
How to encrypt and decrypt JSON properties with JPA— Vlad Mihalcea (@vlad_mihalcea) January 26, 2023
Spring Transaction Best Practices— Vlad Mihalcea (@vlad_mihalcea) January 2, 2023
Hibernate ORM released the 6.2 CR2 version, which brings support for the
MERGE clause in HQL queries. Awesome news!
MySQL 8.0.32 has been released, providing a series of improvements and bug fixes. For instance, you can set a global
explain_format that applies to all
EXPLAIN statements. This is useful since I prefer the
JSON format as it provides more information than the default option does. For more details, check out the release notes.
And to match the server version, the MySQL Connector/J Driver released its 8.0.32 version, providing a series of bug fixes. For more details, check out the release notes.
The 11.2.3 and 11.2.2 versions of the Microsoft JDBC Driver were released, providing a series of bug fixes.
The Spring Data 2022.0.1 and 2021.2.7 has been released, providing bug fixes for both Spring Data JPA 3.0 and 2.7.
Get in touch with my latest articles!
The following StackOverflow answers have been trending since the last newsletter episode:
- How to lock a database row with JPA
- Where to find the DTD of Hibernate?
@Transactional(noRollbackFor=RuntimeException.class)does not prevent rollback on RuntimeException
- The same MySQL query shows up multiple times on Hibernate console, probably causing the slow response
- JPQL to select all objects, but with setMaxResult on object collections