Mercurial > lada > lada-server
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 } |