Jump to: navigation, search

EclipseLink/Examples/JPA/EnumToCode

< EclipseLink‎ | Examples‎ | JPA
Revision as of 09:29, 26 May 2008 by Douglas.clarke.oracle.com (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

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. EclispeLink 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>