char(1)
columns. However, JPA annotation Enumerated allows mapping from Java Enum type into javax.persistence.EnumType.STRING
(i.e. SQL type VARCHAR
) or javax.persistence.EnumType.ORDINAL
(i.e. SQL type INTERGER
) only. I have read a few rather complicated advices, how to make a mapping from general Java Enum type into SQL
char(1)
in Hibernate. After a while, I have found out, that when all constant names in the Enum have length just character, one can make an easy JPA mapping:@Basic(optional = false) @Enumerated(EnumType.STRING) @Column(nullable = false, columnDefinition = "char(1) default 'A'") private FruitType fruit_type = FruitType.A;So, the
FruitType
may be:public enum FruitType { /** Apples */ A, /** Apricots */ B, /** Cherries */ C, /** Pears */ P; }
Well, it has a disadvantage, that "apricots" are represented by
FruitType.B
. But all modern IDE (like Eclipse) shows Javadoc when the developer types the code. Beside the simplicity, the other great advantage is, that the application developer knows that the "apricots" are represented by 'B' in the database. So, it is easier for the developer to write JPQL/HQL/SQL queries. When you a complicated JPA/Hibernate mapping from some type FruitTypeLong.APPRICOT
to the 'B' in database, then it will be just confusing after some time to write JPQL/HQL/SQL queries.