How to map table rows to columns using SQL PIVOT or CASE expressions


I’m now reading the wonderful SQL Antipatterns book by Bill Karwin. The book is a great reference for any developer that needs to interact with a Relational Database System.

In this book, the Entity-Attribute-Value (EAV) model is portrayed as an Anti-Pattern. Although I must admit that a proper relational schema is almost always the best approach when designing an enterprise system, there are use cases when the EAV model is justified.

In this post, I’m going to explain when to use EAV and how to transpose a ResultSet so that rows become columns.

Continue reading “How to map table rows to columns using SQL PIVOT or CASE expressions”


Book Review – Designing Data-Intensive Applications


Exactly one year ago, I bought Designing Data-Intensive Applications by Martin Kleppmann. However, since I was busy writing High-Performance Java Persistence, it took me over a year to find the time to read Martin Kleppmann’s book.

This post is a review of what this book is all about and why you should be interested in reading it.


If you are a backend developer, a team leader or a software architect, this book must be on your reading list. While a junior developer might find the book interesting too, you got to have some background knowledge so that everything falls into place.


The book is a very detailed summary of how database systems work. From relational databases to data warehouses, key-value stores, column-oriented databases, Martin Kleppman describes a great deal of aspects like:

  • storage engines and indexing
  • data encoding
  • data partitioning
  • replication techniques
  • transactions and concurrency control
  • distributed systems and consensus algorithms
  • batch processing
  • streaming

Why you should buy it?

Although some concepts are not very easy to understand, Martin Kleppman does a very good job explaining all these concepts using down-to-earth examples.

The book is a summary of hundreds of research papers, books, and other scientific articles that would require you a great deal of effort to go through all of them, albeit to understand them. Hopefully, you don’t have to since the book is exactly what you need to get a better understanding of how data management systems.


I strongly recommend you buy this book. Although I read it, I’m sure that I’ll come back to it in future to validate that I haven’t forgotten anything I learned from this book.

If you liked this article, you might want to subscribe to my newsletter too.

The performance penalty of Class.forName when parsing JPQL and Criteria queries


While reviewing this Hibernate Pull Request, I stumbled on the HHH-10746 Jira issue. After doing some research, I realized that this issue was reported multiple times in the past 10 years:

In this post, I’m going to explain why this issue was causing performance issues, and how it got fixed.

Continue reading “The performance penalty of Class.forName when parsing JPQL and Criteria queries”

How to customize an entity association JOIN ON clause with Hibernate @JoinFormula


As I explained in this previous article, you can map calculated properties using Hibernate @Formula, and the value is generated at query time.

In this post, you’ll see how you can use a custom SQL fragment to customize the JOIN relationship between two entities, or an entity and a collection of embeddable types.

Continue reading “How to customize an entity association JOIN ON clause with Hibernate @JoinFormula”

One year as a Developer Advocate


Exactly one year ago today, I started working as a Developer Advocate for the Hibernate team at Red Hat. Prior to joining Red Hat, I used to work as a software architect, and I didn’t have any clue what I would have to do as a Developer Advocate. So, I learned on the way.

This post is a summary of what this role is about, and what I’ve managed to accomplish.

Continue reading “One year as a Developer Advocate”