annotate src/main/java/de/intevation/lada/util/data/JsonObjectType.java @ 1299:0eece233cbae

Added JSON object type to database dialect.
author Raimund Renkert <raimund.renkert@intevation.de>
date Fri, 24 Feb 2017 14:28:19 +0100
parents
children
rev   line source
1299
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
1 /* Copyright (C) 2013 by Bundesamt fuer Strahlenschutz
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
2 * Software engineering by Intevation GmbH
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
3 *
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
4 * This file is Free Software under the GNU GPL (v>=3)
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
5 * and comes with ABSOLUTELY NO WARRANTY! Check out
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
6 * the documentation coming with IMIS-Labordaten-Application for details.
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
7 */
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
8 package de.intevation.lada.util.data;
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
9
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
10 import java.io.IOException;
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
11 import java.io.Serializable;
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
12 import java.sql.PreparedStatement;
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
13 import java.sql.ResultSet;
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
14 import java.sql.SQLException;
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
15 import java.sql.Types;
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
16
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
17 import org.hibernate.HibernateException;
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
18 import org.hibernate.engine.spi.SessionImplementor;
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
19 import org.hibernate.usertype.UserType;
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
20
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
21 import com.fasterxml.jackson.databind.JsonNode;
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
22 import com.fasterxml.jackson.databind.ObjectMapper;
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
23
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
24 /**
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
25 * Implementation for a new data type in the postgresql/postgis jdbc driver.
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
26 *
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
27 * @author <a href="mailto:rrenkert@intevation.de">Raimund Renkert</a>
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
28 */
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
29 public class JsonObjectType implements UserType {
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
30 /**
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
31 * Reconstruct an object from the cacheable representation. At the very
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
32 * least this method should perform a deep copy if the type is mutable.
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
33 * (optional <span id="IL_AD5" class="IL_AD">operation</span>)
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
34 *
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
35 * @param cached
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
36 * the object to be cached
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
37 * @param owner
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
38 * the owner of the cached object
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
39 * @return a reconstructed object from the cachable representation
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
40 * @throws HibernateException
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
41 */
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
42 @Override
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
43 public Object assemble(Serializable cached, Object owner) throws HibernateException {
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
44 return this.deepCopy(cached);
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
45 }
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
46
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
47 /**
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
48 * Return a deep copy of the persistent state, stopping at entities and st
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
49 * collections. It is not necessary to copy immutable objects, or null
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
50 * values, in which case it is safe to simple return the argument.
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
51 *
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
52 * @param value
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
53 * the object to be cloned, which may be null
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
54 *
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
55 * @return object a copy
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
56 * @throws HibernateException
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
57 */
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
58 @Override
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
59 public Object deepCopy(Object value) throws HibernateException {
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
60 return value;
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
61 }
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
62
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
63 /**
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
64 * Transform the object into its cacheable representation. At the very least
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
65 * this method should perform a deep copy if the type is mutable. That may
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
66 * not be enough for some implementations, however; for example,
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
67 * <span id="IL_AD11" class="IL_AD">associations</span> must be cached as <span id="IL_AD9" class="IL_AD">identifier</span> values. (optional operation)
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
68 *
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
69 * @param value
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
70 * the object to be cached
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
71 * @return a cachable representation of the object
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
72 * @throws HibernateException
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
73 */
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
74 @Override
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
75 public Serializable disassemble(Object value) throws HibernateException {
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
76 return (String) this.deepCopy(value);
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
77 }
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
78
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
79 /**
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
80 * Compare two instances of the class mapped by this type for persistence
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
81 * "equality". Equality of the persistence state.
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
82 *
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
83 * @param x
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
84 * @param y
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
85 * @return <span id="IL_AD12" class="IL_AD">boolean</span>
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
86 * @throws HibernateException
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
87 */
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
88 @Override
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
89 public boolean equals(Object x, Object y) throws HibernateException {
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
90 if (x == null) {
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
91 return y == null;
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
92 }
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
93 return x.equals(y);
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
94 }
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
95
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
96 /**
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
97 * Get a hashcode for the instance, consistent with persistence "equality".
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
98 */
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
99 @Override
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
100 public int hashCode(Object x) throws HibernateException {
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
101 return x.hashCode();
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
102 }
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
103
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
104 /**
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
105 * Are objects of this type mutable?
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
106 *
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
107 * @return boolean
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
108 */
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
109 @Override
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
110 public boolean isMutable() {
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
111 return true;
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
112 }
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
113
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
114 /**
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
115 * Retrieve an instance of the mapped class from a JDBC resultset.
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
116 * Implementors should handle possibility of null values.
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
117 *
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
118 * @param rs
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
119 * a JDBC result set
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
120 * @param names
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
121 * the column names
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
122 * @param session
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
123 * @param owner
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
124 * the containing entity
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
125 * @return
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
126 * @throws HibernateException
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
127 * @throws SQLException
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
128 */
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
129 @Override
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
130 public Object nullSafeGet(ResultSet rs, String[] names, SessionImplementor session, Object owner) throws HibernateException, SQLException {
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
131 ObjectMapper mapper = new ObjectMapper();
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
132 JsonNode node = null;
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
133 try {
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
134 node = mapper.readTree(rs.getString(names[0]));
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
135 return node;
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
136 } catch (IOException e) {
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
137 e.printStackTrace();
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
138 }
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
139 return mapper.createObjectNode();
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
140 }
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
141
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
142 /**
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
143 * Write an instance of the mapped class to a prepared statement.
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
144 * Implementors should handle possibility of null values. A multi-column
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
145 * type should be written to parameters starting from <tt>index</tt>
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
146 *
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
147 * @param st
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
148 * a JDBC prepared statement
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
149 * @param value
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
150 * the object to write
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
151 * @param index
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
152 * statement parameter index
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
153 * @param session
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
154 * @throws HibernateException
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
155 * @throws SQLException
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
156 */
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
157 @Override
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
158 public void nullSafeSet(PreparedStatement st, Object value, int index, SessionImplementor session) throws HibernateException, SQLException {
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
159 if (value == null) {
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
160 st.setNull(index, Types.OTHER);
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
161 return;
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
162 }
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
163 st.setObject(index, value, Types.OTHER);
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
164 }
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
165
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
166 /**
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
167 * During merge, <span id="IL_AD7" class="IL_AD">replace</span> the existing (target) values in the entity we are
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
168 * merging to with a new (original) value from the detched entity we are
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
169 * merging. For immutable objects, or null values, it is safe to return a
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
170 * copy of the first parameter. For the objects with component values, it
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
171 * might make sense to recursively replace component values
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
172 *
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
173 * @param original
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
174 * the value from the detched entity being merged
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
175 * @param target
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
176 * the value in the managed entity
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
177 * @param owner
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
178 * @return the value to be merged
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
179 * @throws HibernateException
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
180 */
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
181 @Override
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
182 public Object replace(Object original, Object target, Object owner) throws HibernateException {
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
183 return original;
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
184 }
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
185
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
186 /**
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
187 * The class returned by <tt>nullSafeGet()</tt>
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
188 *
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
189 * @return Class
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
190 */
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
191 @Override
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
192 public Class returnedClass() {
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
193 return String.class;
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
194 }
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
195
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
196 /**
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
197 * Returns the SQL type <span id="IL_AD3" class="IL_AD">codes</span> for the columns mapped by this type. The codes
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
198 * are defined on <tt>java.sql.Types</tt>
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
199 *
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
200 * @return int[] the typecodes
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
201 * @see java.sql.Types
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
202 */
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
203 @Override
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
204 public int[] sqlTypes() {
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
205 return new int[] { Types.JAVA_OBJECT };
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
206 }
0eece233cbae Added JSON object type to database dialect.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
207 }
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)