1 package com.vladmihalcea.hibernate.type.json;
2
3 import com.fasterxml.jackson.databind.JsonNode;
4 import com.fasterxml.jackson.databind.ObjectMapper;
5 import com.vladmihalcea.hibernate.type.AbstractHibernateType;
6 import com.vladmihalcea.hibernate.type.json.internal.JsonBinarySqlTypeDescriptor;
7 import com.vladmihalcea.hibernate.type.json.internal.JsonNodeTypeDescriptor;
8 import com.vladmihalcea.hibernate.type.util.Configuration;
9 import com.vladmihalcea.hibernate.type.util.ObjectMapperWrapper;
10
11 /**
12  * Maps a Jackson {@link JsonNode} object on a JSON column type that is managed via {@link java.sql.PreparedStatement#setObject(int, Object)} at JDBC Driver level. For instance, if you are using PostgreSQL, you should be using {@link JsonNodeBinaryType} to map both {@code jsonb} and {@code json} column types to a Jackson {@link JsonNode} object.
13  *
14  * <p>
15  * For more details about how to use it, check out <a href="https://vladmihalcea.com/how-to-store-schema-less-eav-entity-attribute-value-data-using-json-and-hibernate/">this article</a> on <a href="https://vladmihalcea.com/">vladmihalcea.com</a>.
16  *
17  * @author Vlad Mihalcea
18  */

19 public class JsonNodeBinaryType extends AbstractHibernateType<JsonNode> {
20
21     public static final JsonNodeBinaryType INSTANCE = new JsonNodeBinaryType();
22
23     public JsonNodeBinaryType() {
24         super(
25             JsonBinarySqlTypeDescriptor.INSTANCE,
26             new JsonNodeTypeDescriptor(Configuration.INSTANCE.getObjectMapperWrapper())
27         );
28     }
29
30     public JsonNodeBinaryType(Configuration configuration) {
31         super(
32             JsonBinarySqlTypeDescriptor.INSTANCE,
33             new JsonNodeTypeDescriptor(configuration.getObjectMapperWrapper()),
34             configuration
35         );
36     }
37
38     public JsonNodeBinaryType(ObjectMapper objectMapper) {
39         super(
40             JsonBinarySqlTypeDescriptor.INSTANCE,
41             new JsonNodeTypeDescriptor(new ObjectMapperWrapper(objectMapper))
42         );
43     }
44
45     public JsonNodeBinaryType(ObjectMapperWrapper objectMapperWrapper) {
46         super(
47             JsonBinarySqlTypeDescriptor.INSTANCE,
48             new JsonNodeTypeDescriptor(objectMapperWrapper)
49         );
50     }
51
52     public String getName() {
53         return "jsonb-node";
54     }
55 }