Hi,
to convert an database id to the proper enum instance, you can write a
small factory method in the enum class. Also, every enum gets it's
database id.
enum MyType
{
FOO(1), BAR(2), BAZ(3);
private int id = 0;
public MyType(int id) { this.id = id; }
public int getId() { return id; }
public static MyType getInstance(int id)
{
switch(id) {
case 1: return FOO;
case 2: return BAR;
case 3: return BAZ;
}
throw new IllegalArgumentException("Invalid enum id");
}
}
Writing a type handler for this is very easy:
// Imports...
public class MyTypeHandler implements TypeHandlerCallback
{
public Object getResult(ResultGetter getter) throws SQLException
{
int value = getter.getInt();
if (getter.wasNull()) {
return null;
}
return MyType.getInstance(value);
}
public void setParameter(ParameterSetter setter, Object parameter)
throws SQLException
{
if (parameter == null) {
setter.setNull(Types.INTEGER);
} else {
MyType foo = (MyType) parameter;
setter.setInt(foo.getId());
}
}
public Object valueOf(String s)
{
return s;
}
}
That's how i'm doing this.
Regards,
Johannes