AbstractEnumUserType.java
- package org.itracker.persistence.dao;
- import org.hibernate.HibernateException;
- import org.hibernate.usertype.EnhancedUserType;
- import org.hibernate.usertype.ParameterizedType;
- import java.io.Serializable;
- import java.util.Properties;
- /**
- * Base class for custom Hibernate UserTypes to persist a Java 5 enum
- * constant.
- * <p/>
- * <p>This is a parameterized type, which requires the following parameter :
- * <code>enumClassName</code> = fully qualified name of the enum class
- * to persist. </p>
- * <p/>
- * <p>Example of inline mapping : </p>
- * <pre>
- * <property name='suit'>
- * <column name="suit"/>
- * <type name="EnumUserType">
- * <param name="enumClassName">com.company.project.Suit</param>
- * </type>
- * </property>
- * </pre>
- * <p/>
- * <p>Example of typedef : </p>
- * <pre>
- * <typedef name="suit" class='EnumUserType'>
- * <param name="enumClassName">com.company.project.Suit</param>
- * </typedef>
- *
- * <class ...>
- * <column name="suit"/>
- * <property name='suit' type='suit'/>
- * </class>
- * </pre>
- *
- * @author johnny
- */
- public abstract class AbstractEnumUserType
- implements EnhancedUserType, ParameterizedType {
- @SuppressWarnings("unchecked")
- protected Class<? extends Enum> enumClass;
- public AbstractEnumUserType() {
- }
- @SuppressWarnings("unchecked")
- public void setParameterValues(Properties parameters) {
- String enumClassName = parameters.getProperty("enumClassName");
- try {
- this.enumClass = (Class<? extends Enum>) Class.forName(enumClassName);
- } catch (ClassNotFoundException ex) {
- throw new HibernateException("Enum class not found", ex);
- }
- }
- public Object assemble(Serializable cached, Object owner)
- throws HibernateException {
- return cached;
- }
- public Object deepCopy(Object value) throws HibernateException {
- return value;
- }
- public Serializable disassemble(Object value) throws HibernateException {
- return (Enum<?>) value;
- }
- public boolean equals(Object x, Object y) throws HibernateException {
- return (x == y);
- }
- public int hashCode(Object x) throws HibernateException {
- return x.hashCode();
- }
- public boolean isMutable() {
- return false;
- }
- public Object replace(Object original, Object target, Object owner)
- throws HibernateException {
- return original;
- }
- public Class<?> returnedClass() {
- return this.enumClass;
- }
- }