Hibernate JPA and Enums
Assume you have a simple enum:
public enum Status {
ACCEPTED, REJECTED, NOTREADDEN
}
And your legacy database stores it as ordinal values (ACCEPTED = 0, REJECTED = 1, NOTREADDEN = 2). For reasons lost in time, DBA created the column as “varchar”. If you want to use JPA, you will have a bad time using Hibernate:
java.lang.IllegalArgumentException: No enum const class mypkg.Status.1 java.lang.Enum.valueOf(Enum.java:196) org.hibernate.type.EnumType.nullSafeGet(EnumType.java:110)
After digging into EnumType.java, I noticed it is hardcoded “if-varchar-then-name-else-ordinal”. I assume they never dealed with ancient, legacy databases.
If I switch to TopLink, it works as expected… One thumb down to Hibernate…