You could use name() and valueOf() on the enum. The type stored in the DB would be a string. There is extra code though - you need getters and setters for BOTH the string value and the Enum. However, the string versions can remain private as they're only needed by hibernate - doesn't pollute the class interface.
Code:
private MyEnum myEnum;
public MyEnum getMyEnum() {
return myEnum;
}
public void setMyEnum(MyEnum myEnum) {
this.myEnum = myEnum;
}
// hibernate accessor
private String getMyEnumName() {
return myEnum.name();
}
// hibernate accessor
private void setMyEnumName(String myEnumName) {
myEnum = MyEnum.valueOf(myEnumName);
}