@Enumerated: Difference between revisions

From NovaOrdis Knowledge Base
Jump to navigation Jump to search
(Created page with "=Internal= * JPA Concepts =Overview= Optional annotation to use to annotate member variables of that have an enumeration type. If the enumerati...")
 
No edit summary
 
Line 5: Line 5:
=Overview=
=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, the corresponding member variable should be annotated with:
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:


<syntaxhighlight lang='java'>
<syntaxhighlight lang='java'>

Latest revision as of 04:17, 19 October 2018

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]