X-Git-Url: http://juplo.de/gitweb/?p=hibernate4-maven-plugin;a=blobdiff_plain;f=src%2Fit%2Fschemaexport-example%2Fschemaexport-example-domain%2Fsrc%2Fmain%2Fjava%2Fde%2Ftest%2Fschemaexport%2Fdomain%2FEnumUserType.java;fp=src%2Fit%2Fschemaexport-example%2Fschemaexport-example-domain%2Fsrc%2Fmain%2Fjava%2Fde%2Ftest%2Fschemaexport%2Fdomain%2FEnumUserType.java;h=6e598908ae46bec3697f2f27fbfac0178c992e70;hp=0000000000000000000000000000000000000000;hb=426d18e689b89f33bf71601becfa465a00067b10;hpb=3a3aeaabdb1841faf5e1bf8d220230597fb22931 diff --git a/src/it/schemaexport-example/schemaexport-example-domain/src/main/java/de/test/schemaexport/domain/EnumUserType.java b/src/it/schemaexport-example/schemaexport-example-domain/src/main/java/de/test/schemaexport/domain/EnumUserType.java new file mode 100644 index 00000000..6e598908 --- /dev/null +++ b/src/it/schemaexport-example/schemaexport-example-domain/src/main/java/de/test/schemaexport/domain/EnumUserType.java @@ -0,0 +1,110 @@ +package de.test.schemaexport.domain; + +import org.hibernate.HibernateException; +import org.hibernate.engine.spi.SessionImplementor; +import org.hibernate.usertype.EnhancedUserType; +import org.hibernate.usertype.ParameterizedType; + +import java.io.Serializable; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Types; +import java.util.Properties; + +/** + * This Hibernate UserType is used to map JDK 5 Enums directly in a column. + * Define this UserType in your hbm.xml mapping file like the following example: + */ +public class EnumUserType implements EnhancedUserType, ParameterizedType { + + private Class enumClass; + + @Override + public void setParameterValues(Properties parameters) { + String enumClassName = parameters.getProperty("enumClassName"); + try { + enumClass = (Class) Class.forName(enumClassName); + } catch (ClassNotFoundException cnfe) { + throw new HibernateException("Enum class not found", cnfe); + } + } + + @Override + public Object assemble(Serializable cached, Object owner) throws HibernateException { + return cached; + } + + @Override + public Object deepCopy(Object value) throws HibernateException { + return value; + } + + @Override + public Serializable disassemble(Object value) throws HibernateException { + return (Enum) value; + } + + @Override + public boolean equals(Object x, Object y) throws HibernateException { + return x == y; + } + + @Override + public int hashCode(Object x) throws HibernateException { + return x.hashCode(); + } + + @Override + public boolean isMutable() { + return false; + } + + @Override + public Object nullSafeGet(ResultSet rs, String[] names, SessionImplementor sessionImplementor, Object owner) + throws HibernateException, SQLException { + String name = rs.getString(names[0]); + return rs.wasNull() ? null : Enum.valueOf(enumClass, name); + } + + @Override + public void nullSafeSet(PreparedStatement st, Object value, int index, SessionImplementor sessionImplementor) + throws HibernateException, SQLException { + if (value == null) { + st.setNull(index, Types.VARCHAR); + } else { + st.setString(index, ((Enum) value).name()); + } + } + + @Override + public Object replace(Object original, Object target, Object owner) throws HibernateException { + return original; + } + + @Override + public Class returnedClass() { + return enumClass; + } + + @Override + public int[] sqlTypes() { + return new int[]{Types.VARCHAR}; + } + + @Override + public Object fromXMLString(String xmlValue) { + return Enum.valueOf(enumClass, xmlValue); + } + + @Override + public String objectToSQLString(Object value) { + return '\'' + ((Enum) value).name() + '\''; + } + + @Override + public String toXMLString(Object value) { + return ((Enum) value).name(); + } + +}