Notice: this Wiki will be going read only early in 2024 and edits will no longer be possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.
Difference between revisions of "EclipseLink/Examples/JPA/EnumToCode"
(→Using the Converter) |
m (→How to map Enum to coded values) |
||
Line 1: | Line 1: | ||
== How to map Enum to coded values == | == How to map Enum to coded values == | ||
− | The JPA specification allows for mappings of Enums to database columns using the @Enumerated where the database value is either the Enum's name or ordinal value. | + | The JPA specification allows for mappings of Enums to database columns using the @Enumerated where the database value is either the Enum's name or ordinal value. EclipseLink allows a developer to map an enum to coded values as well using a converter. |
In this example the enum Gender(MALE, FEMALE) is mapped to a single character in the database where M=MALE and F=FEMALE. | In this example the enum Gender(MALE, FEMALE) is mapped to a single character in the database where M=MALE and F=FEMALE. |
Revision as of 14:48, 18 September 2008
Contents
How to map Enum to coded values
The JPA specification allows for mappings of Enums to database columns using the @Enumerated where the database value is either the Enum's name or ordinal value. EclipseLink allows a developer to map an enum to coded values as well using a converter.
In this example the enum Gender(MALE, FEMALE) is mapped to a single character in the database where M=MALE and F=FEMALE.
Gender Enum
The Gender enum in this example is defined as:
public enum Gender { Female, Male, ; }
Defining the Converter
An ObjectTypeConverter is used and can be defined in an annotation and any entity class of persistence unit. It requires a unique name across all converters in this persistence unit.
@ObjectTypeConverter(name = "gender", objectType = Gender.class, dataType = String.class, conversionValues = { @ConversionValue(objectValue = "Male", dataValue = "M"), @ConversionValue(objectValue = "Female", dataValue = "F") })
Alternatively the converter can be defined in an EclipseLink specific ORM XML file as:
<object-type-converter name="gender" object-type="model.Gender" data-type="java.lang.String"> <conversion-value object-value="Male" data-value="M" /> <conversion-value object-value="Female" data-value="F" /> </object-type-converter>
Using the Converter
The converter can then be used on any attribute in the domain model of the given enum type.
@Basic @Convert("gender") private Gender gender = Gender.Male;
Or in the ORM.XML:
<basic name="gender"> <column name="GENDER" /> <convert>gender</convert> </basic>