# Vlad Mihalcea

High-Performance Java Persistence, Hibernate, and SQL

This is one page of public article previews, not the complete archive. Follow Next page to continue. Summaries are not the original full articles.

## Meet Jos Roseboom

DevFeed: [Meet Jos Roseboom](<https://devfeed.tech/articles/meet-jos-roseboom-21985.md>)

Original publisher: [Read original article](<https://vladmihalcea.com/meet-jos-roseboom/>)

Author: vladmihalcea

Published: 2026-09-11T04:23:25Z

Content type: article

Language: en

Sources: [Vlad Mihalcea](<https://devfeed.tech/sources/vlad-mihalcea.md>)

Topics: [Java](<https://devfeed.tech/topics/java.md>), [Spring Framework](<https://devfeed.tech/topics/spring-framework.md>), [Spring Boot](<https://devfeed.tech/topics/spring-boot.md>), [Jakarta EE](<https://devfeed.tech/topics/jakarta-ee.md>), [Development](<https://devfeed.tech/topics/development.md>)

Tags: [2026](<https://devfeed.tech/tags/2026.md>), [article](<https://devfeed.tech/tags/article.md>), [blog](<https://devfeed.tech/tags/blog.md>), [community](<https://devfeed.tech/tags/community.md>), [conference](<https://devfeed.tech/tags/conference.md>), [framework](<https://devfeed.tech/tags/framework.md>), [hibernate](<https://devfeed.tech/tags/hibernate.md>), [interview](<https://devfeed.tech/tags/interview.md>), [jakarta-ee](<https://devfeed.tech/tags/jakarta-ee.md>), [java](<https://devfeed.tech/tags/java.md>), [jpa](<https://devfeed.tech/tags/jpa.md>), [performance](<https://devfeed.tech/tags/performance.md>), [performance-tuning](<https://devfeed.tech/tags/performance-tuning.md>), [spring](<https://devfeed.tech/tags/spring.md>), [spring-boot](<https://devfeed.tech/tags/spring-boot.md>)

### AI overview

An interview with Jos Roseboom about JPA and Hibernate performance tuning, based on his JavaZone talk. He describes production incidents involving exhausted database connections and excessive queries caused by fetching entities and following associations.

### Source excerpt

JavaZone 2026 At the beginning of September, I participated in JavaZone for the third time and had the privilege of meeting a lot of passionate software developers willing to share their knowledge with the community. In the first conference day, I attended a very good talk about JPA performance tuning that was delivered by Jos Roseboom and since I enjoyed his talk, I proposed him to gave an interview for this blog. Therefore, in this article we have the pleasure of getting to know Jos and take opportunity of learning about Spring... Read More The post Meet Jos Roseboom appeared first on Vlad Mihalcea.

## How to emulate LEFT JOIN FETCH using Record-based projections

DevFeed: [How to emulate LEFT JOIN FETCH using Record-based projections](<https://devfeed.tech/articles/how-to-emulate-left-join-fetch-using-record-based-projections-21983.md>)

Original publisher: [Read original article](<https://vladmihalcea.com/emulate-left-join-fetch-using-projections/>)

Author: vladmihalcea

Published: 2026-02-27T08:52:13Z

Content type: tutorial

Language: en

Sources: [Vlad Mihalcea](<https://devfeed.tech/sources/vlad-mihalcea.md>)

Topics: [Persistence](<https://devfeed.tech/topics/persistence.md>), [Java](<https://devfeed.tech/topics/java.md>), [Jakarta EE](<https://devfeed.tech/topics/jakarta-ee.md>)

Tags: [article](<https://devfeed.tech/tags/article.md>), [fetch](<https://devfeed.tech/tags/fetch.md>), [hibernate](<https://devfeed.tech/tags/hibernate.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [jakarta-ee](<https://devfeed.tech/tags/jakarta-ee.md>), [java](<https://devfeed.tech/tags/java.md>), [join-fetch](<https://devfeed.tech/tags/join-fetch.md>), [jpa](<https://devfeed.tech/tags/jpa.md>), [unrelated](<https://devfeed.tech/tags/unrelated.md>)

### AI overview

This tutorial explains how to emulate a LEFT JOIN FETCH between two root entities without fetching an intermediate child entity. It uses record-based projections and a JPQL query, and describes how the resulting entities remain managed in the persistence context and can produce updates during flush.

### Source excerpt

Introduction In this article, I'm going to show you how to emulate a LEFT JOIN FETCH between two root entities without fetching the intermediate child entity. I got the inspiration for this article by this comment thread on my blog. Domain Model Let's assume we have the following entities: The Post is the root entity of our hierarchy, but just like it's the case with the relational model, the root entity does not have any reference to its children: On the second level of our hierarchy we have the PostDetails: The PostDetails... Read More The post How to emulate LEFT JOIN FETCH using Record-based projections appeared first on Vlad Mihalcea.

## The best way to replace the deprecated GenericGenerator

DevFeed: [The best way to replace the deprecated GenericGenerator](<https://devfeed.tech/articles/the-best-way-to-replace-the-deprecated-genericgenerator-21988.md>)

Original publisher: [Read original article](<https://vladmihalcea.com/replace-deprecated-genericgenerator/>)

Author: vladmihalcea

Published: 2025-12-02T08:23:12Z

Content type: tutorial

Language: en

Sources: [Vlad Mihalcea](<https://devfeed.tech/sources/vlad-mihalcea.md>)

Topics: [Java](<https://devfeed.tech/topics/java.md>), [Development](<https://devfeed.tech/topics/development.md>), [Spring Boot](<https://devfeed.tech/topics/spring-boot.md>), [Code](<https://devfeed.tech/topics/code.md>), [Jakarta EE](<https://devfeed.tech/topics/jakarta-ee.md>)

Tags: [article](<https://devfeed.tech/tags/article.md>), [database-identifier](<https://devfeed.tech/tags/database-identifier.md>), [deprecated](<https://devfeed.tech/tags/deprecated.md>), [genericgenerator](<https://devfeed.tech/tags/genericgenerator.md>), [hibernate](<https://devfeed.tech/tags/hibernate.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [identifier](<https://devfeed.tech/tags/identifier.md>), [java](<https://devfeed.tech/tags/java.md>), [jpa](<https://devfeed.tech/tags/jpa.md>), [tsid](<https://devfeed.tech/tags/tsid.md>)

### AI overview

This tutorial explains how to replace the deprecated Hibernate @GenericGenerator annotation when upgrading an application to Hibernate 7. It covers custom entity identifier generators and sequence optimizers using the @IdGeneratorType meta-annotation.

### Source excerpt

Introduction In this article, I'm going to show you the best way to replace the deprecated @GenericGenerator when upgrading your application to Hibernate 7. Hibernate @GenericGenerator annotation The @GenericGenerator annotation has been available since Hibernate 3.5, as an alternative to the <generator> XML element from HBM mappings. As illustrated by the Hibernate 6.5 @GenericGenerator Javadoc, this annotation was deprecated in favor of the @IdGeneratorType meta-annotation, which we've been using before for the TSID identifier. Traditionally, there were two main use cases where you'd use the @GenericGenerator annotation: to provide a custom identifier... Read More The post The best way to replace the deprecated GenericGenerator appeared first on Vlad Mihalcea.

## Book Review - Just Use Postgres!

DevFeed: [Book Review - Just Use Postgres!](<https://devfeed.tech/articles/book-review-just-use-postgres-21980.md>)

Original publisher: [Read original article](<https://vladmihalcea.com/book-review-just-use-postgres/>)

Author: vladmihalcea

Published: 2025-11-24T09:00:34Z

Content type: opinion

Language: en

Sources: [Vlad Mihalcea](<https://devfeed.tech/sources/vlad-mihalcea.md>)

Topics: [PostgreSQL](<https://devfeed.tech/topics/postgresql.md>), [Databases](<https://devfeed.tech/topics/databases.md>), [SQL](<https://devfeed.tech/topics/sql.md>), [integrity](<https://devfeed.tech/topics/integrity.md>), [JSON](<https://devfeed.tech/topics/json.md>), [Time Series](<https://devfeed.tech/topics/time-series.md>), [Transactions](<https://devfeed.tech/topics/transactions.md>), [Embeddings](<https://devfeed.tech/topics/embeddings.md>), [genai](<https://devfeed.tech/topics/genai.md>)

Tags: [book](<https://devfeed.tech/tags/book.md>), [book-review](<https://devfeed.tech/tags/book-review.md>), [embeddings](<https://devfeed.tech/tags/embeddings.md>), [genai](<https://devfeed.tech/tags/genai.md>), [integrity](<https://devfeed.tech/tags/integrity.md>), [json](<https://devfeed.tech/tags/json.md>), [postgres](<https://devfeed.tech/tags/postgres.md>), [postgresql](<https://devfeed.tech/tags/postgresql.md>), [sql](<https://devfeed.tech/tags/sql.md>), [time-series](<https://devfeed.tech/tags/time-series.md>), [transactions](<https://devfeed.tech/tags/transactions.md>)

### AI overview

A review of Denis Magda's book Just Use Postgres!, describing its audience, structure, and coverage of PostgreSQL querying, data integrity, transactions, indexes, JSON, full-text search, extensions, embeddings, and time-series workloads.

### Source excerpt

Introduction My friend, Denis Magda, wrote a wonderful book called Just Use Postgres!, and I'm glad that I got the chance to read it. Audience This book is useful for any software developer who's either using PostgreSQL or plans on using it because it covers a lot of features that are very useful for modern applications. No matter your level of seniority, you are definitely going to learn from Denis' book. Content Just Use Postgres! has 402 pages, 3 parts, and 11 chapters. The first part is an introduction to PostgreSQL and... Read More The post Book Review - Just Use Postgres! appeared first on Vlad Mihalcea.

## The best way to clean up test data with Spring and Hibernate

DevFeed: [The best way to clean up test data with Spring and Hibernate](<https://devfeed.tech/articles/the-best-way-to-clean-up-test-data-with-spring-and-hibernate-21982.md>)

Original publisher: [Read original article](<https://vladmihalcea.com/clean-up-test-data-spring/>)

Author: vladmihalcea

Published: 2025-11-11T08:05:24Z

Content type: tutorial

Language: en

Sources: [Vlad Mihalcea](<https://devfeed.tech/sources/vlad-mihalcea.md>)

Topics: [Spring Boot](<https://devfeed.tech/topics/spring-boot.md>), [Integration testing](<https://devfeed.tech/topics/integration-testing.md>), [Testing](<https://devfeed.tech/topics/testing.md>), [Java](<https://devfeed.tech/topics/java.md>), [Spring Framework](<https://devfeed.tech/topics/spring-framework.md>)

Tags: [cleanup](<https://devfeed.tech/tags/cleanup.md>), [hibernate](<https://devfeed.tech/tags/hibernate.md>), [integration-testing](<https://devfeed.tech/tags/integration-testing.md>), [java](<https://devfeed.tech/tags/java.md>), [jpa](<https://devfeed.tech/tags/jpa.md>), [schema](<https://devfeed.tech/tags/schema.md>), [spring](<https://devfeed.tech/tags/spring.md>), [spring-boot](<https://devfeed.tech/tags/spring-boot.md>), [test-data](<https://devfeed.tech/tags/test-data.md>), [testing](<https://devfeed.tech/tags/testing.md>), [truncatemappedobjects](<https://devfeed.tech/tags/truncatemappedobjects.md>)

### AI overview

This tutorial examines how to clean up test data in Spring and Hibernate integration tests. It argues that relying on @DataJpaTest for automatic transaction rollback is not always appropriate and discusses limitations of its SQL logging, including its inability to show bind parameter values or indicate whether batching is used.

### Source excerpt

Introduction In this article, I'm going to show you the best way to clean up test data when using Spring and Hibernate. While it's very common to use the @DataJpaTest annotation when implementing integration tests, in this blog post, you will see why you are better off avoiding using this annotation. Why I don't use @DataJpaTest As explained by the manual, Spring Boot provides the @DataJpaTest annotation for Spring Data JPA integration testing. Once the @DataJpaTest annotation is added to an integration test, Spring Boot will make the following changes to the... Read More The post The best way to clean up test data with Spring and Hibernate appeared first on Vlad Mihalcea.

## Book Review - Troubleshooting Java

DevFeed: [Book Review - Troubleshooting Java](<https://devfeed.tech/articles/book-review-troubleshooting-java-21981.md>)

Original publisher: [Read original article](<https://vladmihalcea.com/book-review-troubleshooting-java/>)

Author: vladmihalcea

Published: 2025-10-15T08:28:01Z

Content type: opinion

Language: en

Sources: [Vlad Mihalcea](<https://devfeed.tech/sources/vlad-mihalcea.md>)

Topics: [Java](<https://devfeed.tech/topics/java.md>), [debugging](<https://devfeed.tech/topics/debugging.md>), [Optimization](<https://devfeed.tech/topics/optimization.md>), [ide](<https://devfeed.tech/topics/ide.md>), [Logging](<https://devfeed.tech/topics/logging.md>), [Query (disambiguation)](<https://devfeed.tech/topics/query.md>), [Databases](<https://devfeed.tech/topics/databases.md>)

Tags: [book](<https://devfeed.tech/tags/book.md>), [book-review](<https://devfeed.tech/tags/book-review.md>), [code-analysis](<https://devfeed.tech/tags/code-analysis.md>), [debugger](<https://devfeed.tech/tags/debugger.md>), [debugging](<https://devfeed.tech/tags/debugging.md>), [developer](<https://devfeed.tech/tags/developer.md>), [ide](<https://devfeed.tech/tags/ide.md>), [java](<https://devfeed.tech/tags/java.md>), [logging](<https://devfeed.tech/tags/logging.md>), [optimization](<https://devfeed.tech/tags/optimization.md>), [performance](<https://devfeed.tech/tags/performance.md>), [performance-tuning](<https://devfeed.tech/tags/performance-tuning.md>), [review](<https://devfeed.tech/tags/review.md>), [sql](<https://devfeed.tech/tags/sql.md>), [troubleshooting](<https://devfeed.tech/tags/troubleshooting.md>)

### AI overview

A review of the second edition of Troubleshooting Java by Laurentiu Spilca. The book covers code analysis, logging, debugging, profiling, SQL query investigation, lock monitoring, and deadlock troubleshooting for Java developers.

### Source excerpt

Introduction My friend, Laurentiu Spilca, has been working on the second edition of his Troubleshooting Java book, and when I was asked to review it, I was more than happy to do it since the book features a lot of topics that I'm also very interested in, such as performance tuning and query optimization. Audience This book is useful for any Java developer because it teaches you how to get the best out of your IDE debugger, as well as showing you how to profile Java applications and fix very complex issues,... Read More The post Book Review - Troubleshooting Java appeared first on Vlad Mihalcea.

## Twelve years of blogging

DevFeed: [Twelve years of blogging](<https://devfeed.tech/articles/twelve-years-of-blogging-21989.md>)

Original publisher: [Read original article](<https://vladmihalcea.com/twelve-years-of-blogging/>)

Author: vladmihalcea

Published: 2025-09-30T11:35:44Z

Content type: opinion

Language: en

Sources: [Vlad Mihalcea](<https://devfeed.tech/sources/vlad-mihalcea.md>)

Topics: [Development](<https://devfeed.tech/topics/development.md>), [Java](<https://devfeed.tech/topics/java.md>), [Spring Framework](<https://devfeed.tech/topics/spring-framework.md>), [Spring Boot](<https://devfeed.tech/topics/spring-boot.md>), [Jakarta EE](<https://devfeed.tech/topics/jakarta-ee.md>), [WordPress](<https://devfeed.tech/topics/wordpress.md>)

Tags: [anniversary](<https://devfeed.tech/tags/anniversary.md>), [article](<https://devfeed.tech/tags/article.md>), [blog](<https://devfeed.tech/tags/blog.md>), [blogging](<https://devfeed.tech/tags/blogging.md>), [jakarta-ee](<https://devfeed.tech/tags/jakarta-ee.md>), [java](<https://devfeed.tech/tags/java.md>), [software-developer](<https://devfeed.tech/tags/software-developer.md>), [spring](<https://devfeed.tech/tags/spring.md>), [spring-boot](<https://devfeed.tech/tags/spring-boot.md>), [wordpress](<https://devfeed.tech/tags/wordpress.md>), [writing](<https://devfeed.tech/tags/writing.md>)

### AI overview

A personal reflection marking twelve years of blogging. The author describes starting the blog while working as a software architect, developing writing experience over time, and finding inspiration in wide-ranging reading. The article also promotes Hypersistence Optimizer for detecting performance issues in JPA and Hibernate data access layers across several Java frameworks.

### Source excerpt

Twelve years later! Twelve years ago today, I decided to create this blog on WordPress.com to share whatever I was finding interesting while working as a software architect. Prior to starting this blog, I didn't have any writing experience, which you can clearly see in the first article I've ever published. However, practice makes perfect, and in time, I managed to learn how to express myself in writing, whether it was an article, a social media post, an answer on StackOverflow, or a book. Follow Your Bliss I've always loved to read.... Read More The post Twelve years of blogging appeared first on Vlad Mihalcea.

## MySQL Query Optimization with Releem

DevFeed: [MySQL Query Optimization with Releem](<https://devfeed.tech/articles/mysql-query-optimization-with-releem-21986.md>)

Original publisher: [Read original article](<https://vladmihalcea.com/mysql-query-optimization-releem/>)

Author: vladmihalcea

Published: 2025-05-12T18:46:00Z

Content type: tutorial

Language: en

Sources: [Vlad Mihalcea](<https://devfeed.tech/sources/vlad-mihalcea.md>)

Topics: [MySQL](<https://devfeed.tech/topics/mysql.md>), [Optimization](<https://devfeed.tech/topics/optimization.md>), [Spring Boot](<https://devfeed.tech/topics/spring-boot.md>), [SQL](<https://devfeed.tech/topics/sql.md>), [Java](<https://devfeed.tech/topics/java.md>)

Tags: [metrics](<https://devfeed.tech/tags/metrics.md>), [mysql](<https://devfeed.tech/tags/mysql.md>), [optimization](<https://devfeed.tech/tags/optimization.md>), [performance](<https://devfeed.tech/tags/performance.md>), [performance-tuning](<https://devfeed.tech/tags/performance-tuning.md>), [petclinic](<https://devfeed.tech/tags/petclinic.md>), [profile](<https://devfeed.tech/tags/profile.md>), [que](<https://devfeed.tech/tags/que.md>), [releem](<https://devfeed.tech/tags/releem.md>), [spring-boot](<https://devfeed.tech/tags/spring-boot.md>), [sql](<https://devfeed.tech/tags/sql.md>)

### AI overview

This tutorial demonstrates how to use Releem to investigate and optimize SQL queries from a Spring application running on MySQL. It uses Spring Petclinic, a JMeter test plan, and load-related CPU and I/O metrics to identify time-consuming queries and apply optimization recommendations.

### Source excerpt

Introduction In this article, I'm going to show you how to optimize the queries executed by a Spring application running on MySQL using Releem. For a short introduction about Releem, check out this previous article, in which I explained how to set up Releem to collect metrics from your MySQL database. Spring Petclinic application The application under test is going to be the well-known Spring Petclinic that we are going to run using the MySQL profile: After starting the application, we are going to run the petclinic_test_plan.jmx JMeter test plan that is... Read More The post MySQL Query Optimization with Releem appeared first on Vlad Mihalcea.

## Foundations of AI and Machine Learning for Java Developers Course Review

DevFeed: [Foundations of AI and Machine Learning for Java Developers Course Review](<https://devfeed.tech/articles/foundations-of-ai-and-machine-learning-for-java-developers-course-review-21984.md>)

Original publisher: [Read original article](<https://vladmihalcea.com/foundations-of-ai-and-ml-course-review/>)

Author: vladmihalcea

Published: 2025-04-11T08:26:55Z

Content type: comparison

Language: en

Sources: [Vlad Mihalcea](<https://devfeed.tech/sources/vlad-mihalcea.md>)

Topics: [Java](<https://devfeed.tech/topics/java.md>), [Machine Learning & Artificial Intelligence](<https://devfeed.tech/topics/machine-learning-artificial-intelligence.md>), [Artificial Intelligence](<https://devfeed.tech/topics/ai.md>), [Large Language Model](<https://devfeed.tech/topics/llm.md>), [Retrieval Augmented Generation (RAG)](<https://devfeed.tech/topics/retrieval-augmented-generation-rag.md>)

Tags: [ai](<https://devfeed.tech/tags/ai.md>), [course](<https://devfeed.tech/tags/course.md>), [java](<https://devfeed.tech/tags/java.md>), [large-language-models](<https://devfeed.tech/tags/large-language-models.md>), [learning](<https://devfeed.tech/tags/learning.md>), [machine-learning](<https://devfeed.tech/tags/machine-learning.md>), [ml](<https://devfeed.tech/tags/ml.md>), [retrieval-augmented-generation-rag](<https://devfeed.tech/tags/retrieval-augmented-generation-rag.md>), [review](<https://devfeed.tech/tags/review.md>), [video](<https://devfeed.tech/tags/video.md>)

### AI overview

A review of Frank Greco's Foundations of AI and Machine Learning for Java Developers video course. The course introduces AI and machine learning concepts, predictive and generative AI, large language models, RAG, and Java-based examples.

### Source excerpt

Introduction In this article, I'm going to review the Foundations of AI and Machine Learning for Java Developers video course from my fellow Java Champion, Frank Greco. If you are new to AI and ML and want to get a great introduction to these topics, then you should definitely join watch the video lessons created by Frank Greco. And, thanks to LinkedIn Learning's generosity, until June 20, you can enroll in this video course for free. Video Course Agenda The course provides one hour and thirty-five minutes of video lessons that are... Read More The post Foundations of AI and Machine Learning for Java Developers Course Review appeared first on Vlad Mihalcea.

## How to map the Oracle TIMESTAMP WITH TIME ZONE with JPA

DevFeed: [How to map the Oracle TIMESTAMP WITH TIME ZONE with JPA](<https://devfeed.tech/articles/how-to-map-the-oracle-timestamp-with-time-zone-with-jpa-21987.md>)

Original publisher: [Read original article](<https://vladmihalcea.com/oracle-timestamp-with-time-zone-jpa/>)

Author: vladmihalcea

Published: 2025-03-18T16:21:37Z

Content type: tutorial

Language: en

Sources: [Vlad Mihalcea](<https://devfeed.tech/sources/vlad-mihalcea.md>)

Topics: [Oracle Database](<https://devfeed.tech/topics/oracle-database.md>), [Java](<https://devfeed.tech/topics/java.md>), [SQL](<https://devfeed.tech/topics/sql.md>)

Tags: [article](<https://devfeed.tech/tags/article.md>), [hibernate](<https://devfeed.tech/tags/hibernate.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [java](<https://devfeed.tech/tags/java.md>), [jpa](<https://devfeed.tech/tags/jpa.md>), [mapping](<https://devfeed.tech/tags/mapping.md>), [offsetdatetime](<https://devfeed.tech/tags/offsetdatetime.md>), [oracle](<https://devfeed.tech/tags/oracle.md>), [sql](<https://devfeed.tech/tags/sql.md>), [timezone](<https://devfeed.tech/tags/timezone.md>), [types](<https://devfeed.tech/tags/types.md>), [zoneddatetime](<https://devfeed.tech/tags/zoneddatetime.md>)

### AI overview

A tutorial on mapping Oracle TIMESTAMP WITH TIME ZONE columns to Java date-time types using JPA and Hibernate. It explains how ZonedDateTime and OffsetDateTime correspond to the Oracle column type and how to preserve time zone region information when retrieving values.

### Source excerpt

Introduction In this article, I'm going to explain how to map the Oracle TIMESTAMP WITH TIME ZONE with JPA and Hibernate. While the DATE and TIMESTAMP column types are suitable for mapping the LocalDateTime, the TIMESTAMP WITH TIME ZONE column type allows us to map both the ZonedDateTime and OffsetDateTime. Oracle TIMESTAMP WITH TIME ZONE Traditionally, Oracle provided the DATE and TIMESTAMP column types to store timestamp values. The difference between the DATE and TIMESTAMP types is that the TIMESTAMP column type allows us to store fractional seconds while the DATE type... Read More The post How to map the Oracle TIMESTAMP WITH TIME ZONE with JPA appeared first on Vlad Mihalcea.