The best way to implement an audit log using Hibernate Envers

Introduction

As previously explained, CDC (Change Data Capture) is an essential step to extract change events from an OLTP application to make them available to other modules in an enterprise system (e.g. caches, data warehouse).

While Debezium is the most efficient way of doing CDC, it might be that you need a simpler solution in your project. Hibernate Envers is a Hibernate ORM extension that allows you to capture change events in no time.

In this article, we are going to see the most efficient way of using Hibernate Envers.

Continue reading “The best way to implement an audit log using Hibernate Envers”

Advertisements

How to map a @ManyToOne association using a non-Primary Key column with JPA and Hibernate

Introduction

While answering questions on the Hibernate forum, I stumbled on the following question about using the @ManyToOne annotation when the Foreign Key column on the client side references a non-Primary Key column on the parent side.

In this article, you are going to see how to use the @JoinColumn annotation in order to accommodate non-Primary Key many-to-one associations.

Continue reading “How to map a @ManyToOne association using a non-Primary Key column with JPA and Hibernate”

How to store schema-less EAV (Entity-Attribute-Value) data using JSON and Hibernate

Introduction

One of my Twitter followers has recently asked me about a way of storing EAV (Entity-Attribute-Value) data using JPA and Hibernate, and, because this is a very good question, I decided to turn answer it using a blog post.

In this article, you are going to see how you can use JSON types to store schema-less EAV data.

Continue reading “How to store schema-less EAV (Entity-Attribute-Value) data using JSON and Hibernate”

How to optimize the merge operation using update while batching with JPA and Hibernate

Introduction

One of my readers has recently asked me about optimizing the merge entity state transition, and, because this is a great question, I decided to turn it into a blog post.

In this article, you are going to see a shortcoming of the merge entity state transition and how you can deal with it using Hibernate.

Continue reading “How to optimize the merge operation using update while batching with JPA and Hibernate”

The best way to map a many-to-many association with extra columns when using JPA and Hibernate

Introduction

For a simple many-to-many database relationship, you can use the @ManyToMany JPA annotation and, therefore, hide the join table.

However, sometimes you need more than the two Foreign Key columns in the join table, and, for this purpose, you need to replace the @ManyToMany association with two bidirectional @OneToMany associations. Unlike unidirectional @OneToMany, the bidirectional relationship is the best way to map a one-to-many database relationship that requires a collection of Child elements on the parent side

In this article, we are going to see how you can map a many-to-many database relationship using an intermediary entity for the join table. This way, we can map additional columns that would be otherwise impossible to persist using the @ManyToMany JPA annotation.

Continue reading “The best way to map a many-to-many association with extra columns when using JPA and Hibernate”