Quote:
I'm presuming some implementation of the Type interface, but...
Actually, implement the UserType interface. Below is one of my UserType impls which handles an enum class named EligibilityLevel.
Code:
public class EligibilityLevelType
implements net.sf.hibernate.UserType, java.io.Serializable
{
private static final Class CLAZZ = EligibilityLevel.class;
private static final int[] SQL_TYPES = new int[] { java.sql.Types.INTEGER };
private Logger log = Logger.getLogger( getClass() );
public EligibilityLevelType()
{
}
public Class returnedClass()
{
return CLAZZ ;
}
public int[] sqlTypes()
{
return SQL_TYPES ;
}
public boolean isMutable()
{
return false;
}
public Object deepCopy( Object obj )
throws net.sf.hibernate.HibernateException
{
return obj;
}
public boolean equals( Object obj1, Object obj2 )
throws net.sf.hibernate.HibernateException
{
if( obj1 == obj2 ) return true;
if( obj1 == null || obj2 == null ) return false;
return ((EligibilityLevel)obj1).equals( (EligibilityLevel)obj2 );
}
public Object nullSafeGet( java.sql.ResultSet resultSet, String[] names, Object owner )
throws net.sf.hibernate.HibernateException, java.sql.SQLException
{
Integer value = (Integer)Hibernate.INTEGER.nullSafeGet( resultSet, names[0] );
try
{
if (value == null)
return null;
else
return EligibilityLevel.getEligibilityLevel( value.intValue() );
}
catch( Exception e )
{
log.warn( "Error resolving eligibility-level value [" + value + "] into eligibility-leve enum", e );
}
return null;
}
public void nullSafeSet( java.sql.PreparedStatement preparedStatement, Object obj, int index )
throws net.sf.hibernate.HibernateException, java.sql.SQLException
{
EligibilityLevel level = (EligibilityLevel)obj;
Hibernate.INTEGER.nullSafeSet( preparedStatement, new Integer(level.getValue()), index );
}
}
Then in mappings, do:
Code:
<property
name="eligibilityLevel"
type="EligibilityLevelType"
column="elig_level"
/>
where the 'eligibilityLevel' property is of type EligibilityLevel...