1 package com.vladmihalcea.hibernate.type.basic;
2
3 import com.vladmihalcea.hibernate.type.ImmutableType;
4 import org.hibernate.engine.spi.SharedSessionContractImplementor;
5
6 import java.sql.PreparedStatement;
7 import java.sql.ResultSet;
8 import java.sql.SQLException;
9 import java.sql.Types;
10 import java.util.Map;
11
12 /**
13  * Maps a {@link Map} object type to a PostgreSQL <a href="https://www.postgresql.org/docs/current/hstore.html">hstore</a>
14  * column type.
15  * <p>
16  * For more details about how to use it,
17  * check out <a href="https://vladmihalcea.com/map-postgresql-hstore-jpa-entity-property-hibernate/">this article</a>
18  * on <a href="https://vladmihalcea.com/">vladmihalcea.com</a>.
19  *
20  * @author Edgar Asatryan
21  * @author Vlad Mihalcea
22  */

23 public class PostgreSQLHStoreType extends ImmutableType<Map> {
24
25     public static final PostgreSQLHStoreType INSTANCE = new PostgreSQLHStoreType();
26
27     public PostgreSQLHStoreType() {
28         super(Map.class);
29     }
30
31     @Override
32     public int[] sqlTypes() {
33         return new int[]{Types.OTHER};
34     }
35
36     @Override
37     protected Map get(ResultSet rs, String[] names, SharedSessionContractImplementor session, Object owner) throws SQLException {
38         return (Map) rs.getObject(names[0]);
39     }
40
41     @Override
42     protected void set(PreparedStatement st, Map value, int index, SharedSessionContractImplementor session) throws SQLException {
43         st.setObject(index, value);
44     }
45 }
46