Skip to main content

Notice: This Wiki is now read only and edits are no longer possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.

Jump to: navigation, search

EclipseLink/Examples/JPA/EnumToCode

< EclipseLink‎ | Examples‎ | JPA
Revision as of 14:48, 18 September 2008 by Unnamed Poltroon (Talk) (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. 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>

Back to the top