1 package com.vladmihalcea.hibernate.type.json;
2
3 import com.fasterxml.jackson.databind.ObjectMapper;
4 import com.vladmihalcea.hibernate.type.AbstractHibernateType;
5 import com.vladmihalcea.hibernate.type.json.internal.JsonBinarySqlTypeDescriptor;
6 import com.vladmihalcea.hibernate.type.json.internal.JsonTypeDescriptor;
7 import com.vladmihalcea.hibernate.type.util.Configuration;
8 import com.vladmihalcea.hibernate.type.util.ObjectMapperWrapper;
9 import org.hibernate.usertype.DynamicParameterizedType;
10
11 import java.lang.reflect.Type;
12 import java.util.Properties;
13
14 /**
15  * Maps any given Java object on a JSON column type that is managed via {@link java.sql.PreparedStatement#setObject(int, Object)} at JDBC Driver level.
16  * <p>
17  * If you are using <strong>PostgreSQL</strong>, you should use this {@link JsonBinaryType} to map both <strong>{@code jsonb}</strong> and <strong>{@code json}</strong> column types.
18  * <p>
19  * For more details about how to use it, check out <a href="https://vladmihalcea.com/how-to-map-json-objects-using-generic-hibernate-types/">this article</a> on <a href="https://vladmihalcea.com/">vladmihalcea.com</a>.
20  *
21  * @author Vlad Mihalcea
22  */

23 public class JsonBinaryType
24         extends AbstractHibernateType<Object> implements DynamicParameterizedType {
25
26     public static final JsonBinaryType INSTANCE = new JsonBinaryType();
27
28     public JsonBinaryType() {
29         super(
30             JsonBinarySqlTypeDescriptor.INSTANCE,
31             new JsonTypeDescriptor(Configuration.INSTANCE.getObjectMapperWrapper())
32         );
33     }
34
35     public JsonBinaryType(Type javaType) {
36         super(
37             JsonBinarySqlTypeDescriptor.INSTANCE,
38             new JsonTypeDescriptor(Configuration.INSTANCE.getObjectMapperWrapper(), javaType)
39         );
40     }
41
42     public JsonBinaryType(Configuration configuration) {
43         super(
44             JsonBinarySqlTypeDescriptor.INSTANCE,
45             new JsonTypeDescriptor(configuration.getObjectMapperWrapper()),
46             configuration
47         );
48     }
49
50     public JsonBinaryType(ObjectMapper objectMapper) {
51         super(
52             JsonBinarySqlTypeDescriptor.INSTANCE,
53             new JsonTypeDescriptor(new ObjectMapperWrapper(objectMapper))
54         );
55     }
56
57     public JsonBinaryType(ObjectMapperWrapper objectMapperWrapper) {
58         super(
59             JsonBinarySqlTypeDescriptor.INSTANCE,
60             new JsonTypeDescriptor(objectMapperWrapper)
61         );
62     }
63
64     public JsonBinaryType(ObjectMapper objectMapper, Type javaType) {
65         super(
66             JsonBinarySqlTypeDescriptor.INSTANCE,
67             new JsonTypeDescriptor(new ObjectMapperWrapper(objectMapper), javaType)
68         );
69     }
70
71     public JsonBinaryType(ObjectMapperWrapper objectMapperWrapper, Type javaType) {
72         super(
73             JsonBinarySqlTypeDescriptor.INSTANCE,
74             new JsonTypeDescriptor(objectMapperWrapper, javaType)
75         );
76     }
77
78     public String getName() {
79         return "jsonb";
80     }
81
82     @Override
83     public void setParameterValues(Properties parameters) {
84         ((JsonTypeDescriptor) getJavaTypeDescriptor()).setParameterValues(parameters);
85     }
86
87 }