Introduction
The Hibernate Types repository gives you extra types and general purpose utilities that are not supported by the Hibernate ORM core.
The main advantage of this project is that it supports a broad range of Hibernate versions, spanning from Hibernate 4.1 to Hibernate 5.5.
Features
JSON
Generic JSON Type
The JsonType
allows you to map JSON column types, no matter if you're using Oracle,
SQL Server, PostgreSQL or MySQL.
Just add the following mapping to your package-info.java
class in the same package where your JPA entities are located:
@TypeDef(
name = "json", typeClass = JsonType.class
)
package io.hypersistence.optimizer;
import com.vladmihalcea.hibernate.type.json.JsonType;
import org.hibernate.annotations.TypeDef;
And, later, you can map any JSON column to Map
, List
, POJO, String
, or JsonNode
entity property:
@Type(type = "json")
private Map<String, String> properties = new HashMap<>();
For more details, check out this article.
Best Practices
When mapping a JSON column type to a
POJO
,List<POJO>
orMap<String, POJO>
, you need to make sure that thePOJO
type overrides the defaultequals
andhashCode
methods and implements them according to the JSON object content.Otherwise, the Hibernate dirty checking mechanism may trigger unexpected UPDATE statements. Check out the #134 issue for more details.
Database-specific JSON types
Oracle
You should use the JsonStringType
to map a VARCHAR2
column type storing JSON.
You should use the JsonBlobType
to map a BLOB
column type storing JSON.
For more details, check out this article.
SQL Server
You should use this JsonStringType
to map an NVARCHAR
column type storing JSON.
For more details, check out this article.
PostgreSQL
You should use this JsonBinaryType
to map both jsonb
and json
column types.
For more details, check out this article.
MySQL
You should use this JsonStringType
to map the json
column type.
For more details, check out this article.
JSON mapping examples
- How to map a POJO to a JSON column using JPA and Hibernate
- How to map a String JPA property to a JSON column using Hibernate
- How to map a Jackson
JsonNode
to a JSON column - How to map JSON collections using JPA and Hibernate
- How to map a Java Map entity property as a JSON column with JPA and Hibernate
- How to map Java Records to JSON columns using Hibernate
- How to map polymorphic JSON objects with JPA and Hibernate
- How to encrypt and decrypt JSON properties with JPA and Hibernate
- Why you should use Hibernate Dynamic Update for JSON properties
- How to map Oracle JSON columns using JPA and Hibernate
- How to map SQL Server JSON columns using JPA and Hibernate
- How to customize the Jackson ObjectMapper used by Hibernate-Types
- How to customize the JSON Serializer used by Hibernate-Types
- How to fix the Hibernate
No Dialect mapping for JDBC type: 1111
issue when mixing JSON types with native SQL queries - How to fix the
column is of type jsonb but expression is of type record
orbytea
issue
ARRAY
- How to map a PostgreSQL ARRAY to a Java
List
with JPA and Hibernate - How to map the PostgreSQL ARRAY to Java Arrays with JPA and Hibernate
- Multidimensional array mapping with JPA and Hibernate
- How to map the HSQLDB ARRAY type with JPA and Hibernate
PostgreSQL Types (e.g. ENUM, INET, HSTORE, RANGE)
- Java Enum to PostgreSQL Enum Type
- How to map the PostgreSQL Inet type with JPA and Hibernate
- How to map a PostgreSQL HStore entity property with JPA and Hibernate
- How to map a PostgreSQL Enum ARRAY to a JPA entity property using Hibernate
- How to map a PostgreSQL Range column type with JPA and Hibernate
- How to map a PostgreSQL Interval to a Java
Duration
with Hibernate
Generic Types
- How to map
java.time.YearMonth
to DATE or INTEGER column - How to map
java.time.Year
andjava.time.Month
with JPA and Hibernate Character
to nullable CHAR columnImmutableType
utility to simplifyUserType
implementations
Utilities
Identifier Generators
Naming Strategy
DTO Projection and ResultTransformer
ClassImportIntegrator
- How to write a compact DTO projection query with JPAListResultTransformer
- The best way to use a Hibernate ResultTransformerMapResultTransformer
- How to return a Map result from a JPA or Hibernate query
Installation
Depending on the Hibernate version you are using, you need to add the following dependency:
Hibernate 5.5
<dependency>
<groupId>com.vladmihalcea</groupId>
<artifactId>hibernate-types-55</artifactId>
<version>2.14.0</version>
</dependency>
Hibernate 5.4, 5.3 and 5.2
<dependency>
<groupId>com.vladmihalcea</groupId>
<artifactId>hibernate-types-52</artifactId>
<version>2.14.0</version>
</dependency>
Hibernate 5.1 and 5.0
<dependency>
<groupId>com.vladmihalcea</groupId>
<artifactId>hibernate-types-5</artifactId>
<version>2.14.0</version>
</dependency>
Hibernate 4.3
<dependency>
<groupId>com.vladmihalcea</groupId>
<artifactId>hibernate-types-43</artifactId>
<version>2.14.0</version>
</dependency>
Hibernate 4.2 and 4.1
<dependency>
<groupId>com.vladmihalcea</groupId>
<artifactId>hibernate-types-4</artifactId>
<version>2.14.0</version>
</dependency>
Requirements
- Java version supported by the Hibernate ORM version you are using.
- SLF4J
- Jackson Databind
Issue management
If you have an issue, then there are two ways to address it.
Option 1: Providing your own fix
This project being open-source, you have the ability of fixing any issue. So, in this case, this is what you need to do:
- Provide a replicating test case using the existing test cases as a template
- Provide a fix proposal
- Send a Pull Request with the fix proposal and the test case
Option 2: Paid support
If you don't have the time to provide a fix, the I could fix your issue via consulting.
Are you struggling with application performance issues?
Imagine having a tool that can automatically detect if you are using JPA and Hibernate properly. No more performance issues, no more having to spend countless hours trying to figure out why your application is barely crawling.
Imagine discovering early during the development cycle that you are using suboptimal mappings and entity relationships or that you are missing performance-related settings.
More, with Hypersistence Optimizer, you can detect all such issues during testing and make sure you don't deploy to production a change that will affect data access layer performance.
Hypersistence Optimizer is the tool you've been long waiting for!
Training
If you are interested in on-site training, I can offer you my High-Performance Java Persistence training, which can be adapted to one, two or three days of sessions. For more details, check out my website.
Consulting
If you want me to review your application and provide insight into how you can optimize it to run faster, then check out my consulting page.
High-Performance Java Persistence Video Courses
If you want the fastest way to learn how to speed up a Java database application, then you should definitely enroll in my High-Performance Java Persistence video courses.
High-Performance Java Persistence Book
Or, if you prefer reading books, you are going to love my High-Performance Java Persistence book as well.