Mercurial > lada > lada-server
diff src/main/java/de/intevation/lada/util/data/IntegerArrayType.java @ 653:d067d72e602c
Implemented new hibernate usertype: integer array; registered new type in dialect.
author | Raimund Renkert <raimund.renkert@intevation.de> |
---|---|
date | Tue, 12 May 2015 15:15:27 +0200 |
parents | |
children | 3ec358698b4d |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/java/de/intevation/lada/util/data/IntegerArrayType.java Tue May 12 15:15:27 2015 +0200 @@ -0,0 +1,93 @@ +package de.intevation.lada.util.data; + +import java.io.Serializable; +import java.sql.Array; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; + +import org.hibernate.HibernateException; +import org.hibernate.engine.spi.SessionImplementor; +import org.hibernate.usertype.UserType; + +public class IntegerArrayType implements UserType { + protected static final int SQLTYPE = java.sql.Types.ARRAY; + + @Override + public int[] sqlTypes() { + return new int[] {SQLTYPE}; + } + + @Override + public Class<Integer[]> returnedClass() { + return Integer[].class; + } + + @Override + public boolean equals(Object x, Object y) + throws HibernateException { + return x == null ? y == null : x.equals(y); + } + + @Override + public int hashCode(Object x) + throws HibernateException { + return x == null ? 0 : x.hashCode(); + } + + @Override + public Object nullSafeGet( + ResultSet rs, + String[] names, + SessionImplementor session, + Object owner) + throws HibernateException, SQLException { + Array array = rs.getArray(names[0]); + Integer[] javaArray = (Integer[]) array.getArray(); + return javaArray; + } + + @Override + public void nullSafeSet( + PreparedStatement st, + Object value, + int index, + SessionImplementor session) + throws HibernateException, SQLException { + Connection connection = st.getConnection(); + Integer[] castObject = (Integer[]) value; + Array array = connection.createArrayOf("integer", castObject); + st.setArray(index, array); + } + + @Override + public Object deepCopy(Object value) + throws HibernateException { + return value == null ? null : ((Integer[]) value).clone(); + } + + @Override + public boolean isMutable() { + return true; + } + + @Override + public Serializable disassemble(Object value) + throws HibernateException { + return (Integer[])this.deepCopy(value); + } + + @Override + public Object assemble(Serializable cached, Object owner) + throws HibernateException { + return this.deepCopy(cached); + } + + @Override + public Object replace(Object original, Object target, Object owner) + throws HibernateException { + return original; + } + +}