@Enumerated

From NovaOrdis Knowledge Base
Jump to navigation Jump to search

Internal

Overview

Optional annotation to use to annotate member variables of that have an enumeration type. If the enumeration type values are represented as an integer in the database, no annotation is necessary. This is the default. If the enumeration type values are represented as string (VARCHARs), the corresponding member variable should be annotated with:

    @Enumerated(EnumType.STRING)
    private final Color color;

    public enum Color {
        WHITE, BLUE, RED, GREEN, BLACK
    }

If the values are maintained in the database as VARCHARs ("WHITE", etc.) and the member variable is not annotated to indicate that, we get a conversion error:

rg.postgresql.util.PSQLException: Bad value for type int : WRAP
	at org.postgresql.jdbc.PgResultSet.toInt(PgResultSet.java:2844) ~[postgresql-42.2.5.jar!/:42.2.5]
	at org.postgresql.jdbc.PgResultSet.getInt(PgResultSet.java:2073) ~[postgresql-42.2.5.jar!/:42.2.5]
	at org.postgresql.jdbc.PgResultSet.getInt(PgResultSet.java:2485) ~[postgresql-42.2.5.jar!/:42.2.5]
	...
	at org.hibernate.type.EnumType$OrdinalEnumValueMapper.getValue(EnumType.java:337) ~[hibernate-core-5.2.17.Final.jar!/:5.2.17.Final]