Skip to main content

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.

Jump to: navigation, search

Difference between revisions of "EclipseLink/UserGuide/JPA/Basic JPA Development/Mapping/Basic Mappings/Default Conversions and Converters/Converter/ObjectTypeConverter"

m (New page: {{EclipseLink_API |1=*[http://www.eclipse.org/eclipselink/api/ org.eclipse.persistence.platform.database.DatabasePlatform] |2=*[http://www.eclipse.org/eclipselink/api/ org.eclipse.persiste...)
 
m (Removing all content from page)
 
Line 1: Line 1:
{{EclipseLink_API
 
|1=*[http://www.eclipse.org/eclipselink/api/ org.eclipse.persistence.platform.database.DatabasePlatform]
 
|2=*[http://www.eclipse.org/eclipselink/api/ org.eclipse.persistence.database.platform.converters.StructConverter]
 
}}
 
=@StructConverter Annotation=
 
  
The <tt>@StructConverter</tt> is an EclipseLink-specific annotation. You can add it to an <tt>org.eclipse.persistence.platform.database.DatabasePlatform</tt> using its <tt>addStructConverter</tt> method to enable custom processing of <tt>java.sql.Struct</tt> types.
 
<source lang="java">
 
@Target({TYPE, METHOD, FIELD})
 
@Retention(RUNTIME)
 
public @interface StructConverter {
 
    String name();
 
    String converter();
 
}
 
</source>
 
This table lists attributes of the <tt>@StructConverter</tt> annotation.
 
 
<span id="Table 19-10"></span>
 
{| class="RuleFormalWideMax" dir="ltr" title="Attributes of the @StructConverter Annotation" summary="Lists attributes of the @StructConverter annotation" width="100%" border="1" frame="border" rules="all" cellpadding="3" frame="border" rules="all"
 
|- align="left" valign="top"
 
! id="r1c1-t15" align="left" valign="bottom" | '''Attribute'''
 
! id="r1c2-t15" align="left" valign="bottom" | '''Description'''
 
! id="r1c3-t15" align="left" valign="bottom" | '''Default'''
 
! id="r1c4-t15" align="left" valign="bottom" | '''Required or Optional'''
 
|- align="left" valign="top"
 
| id="r2c1-t15" headers="r1c1-t15" align="left" |
 
<tt>name</tt>
 
| headers="r2c1-t15 r1c2-t15" align="left" |
 
Set this attribute to the <tt>String</tt> name for your converter. Ensure that this name is unique across the persistence unit.
 
| headers="r2c1-t15 r1c3-t15" align="left" |
 
no default
 
| headers="r2c1-t15 r1c4-t15" align="left" |
 
required
 
|- align="left" valign="top"
 
| id="r3c1-t15" headers="r1c1-t15" align="left" |
 
<tt>converter</tt>
 
| headers="r3c1-t15 r1c2-t15" align="left" |
 
Set this attribute to the converter class as a <tt>String</tt>. This class must implement the EclipseLink <tt>org.eclipse.persistence.mappings.converters.Converter</tt> interface.
 
| headers="r3c1-t15 r1c3-t15" align="left" |
 
no default
 
| headers="r3c1-t15 r1c4-t15" align="left" |
 
required
 
|}
 
 
 
This example shows how to define the <tt>@StructConverter</tt>.
 
 
<span id="Example 19-10"></span>
 
''''' Defining the @StructConverter'''''
 
<source lang="java">
 
@StructConverter(name="MyType",
 
    converter="myproject.converters.MyStructConverter")
 
</source>
 
 
You can specify the <tt>@StructConverter</tt> annotation anywhere in an <tt>Entity</tt> with the scope being the whole session.
 
 
EclipseLink will throw an exception if you add more than one <tt>StructConverter</tt> that affects the same Java type.
 
 
A <tt>@StructConverter</tt> exists in the same namespaces as <tt>[[#How to Use the @Converter Annotation|@Converter]]</tt>. EclipseLink will throw a validation exception if you add a <tt>Converter</tt> and a <tt>StructConverter</tt> of the same name.
 
{EclipseLink_Note
 
|note=You can also configure structure converters in a <tt>sessions.xml</tt> file (see [[#What You May Need to Know About EclipseLink JPA Overriding Mechanisms|What You May Need to Know About EclipseLink JPA Overriding Mechanisms]]).}}
 
 
 
 
==Using Structure Converters to Configure Mappings==
 
 
In EclipseLink, a <tt>DatabasePlatform</tt> (see [[Introduction%20to%20Data%20Access%20(ELUG)#Database Platforms|Database Platforms]]) holds a structure converter. An <tt>org.eclipse.persistence.database.platform.converters.StructConverter</tt> affects all objects of a particular type read into the <tt>Session</tt> that has that <tt>DatabasePlatform</tt>. This prevents you from configuring the <tt>StructConverter</tt> on a mapping-by-mapping basis. To configure mappings that use the <tt>StructConverter</tt>, you call their <tt>setFieldType(java.sql.Types.STRUCT)</tt> method. You must call this method on all mappings that the <tt>StructConverter</tt> will affect – if you do not call it, errors might occur.
 
 
The JPA specification requires all <tt>@Basic</tt> mappings (see [[Introduction%20to%20EclipseLink%20JPA%20(ELUG)#@Basic|@Basic]]) that map to a non-primitive or a non-primitive-wrapper type have a serialized converter added to them. This enables certain <tt>STRUCT</tt> types to map to a field without serialization.
 
 
You can use the existing <tt>[[#How to Use the @Convert Annotation|@Convert]]</tt> annotation with its <tt>value</tt> attribute set to the <tt>StructConverter</tt> name – in this case, EclipseLink will apply appropriate settings to the mapping. This setting will be required on all mappings that use a type for which a <tt>StructConverter</tt> has been defined. Failing to configure the mapping with the <tt>@Convert</tt> will cause an error.
 
 
For more information, see the following:
 
* [[Introduction%20to%20Object-Relational%20Data%20Type%20Mappings%20(ELUG)#Object-Relational Data Type Structure Mapping|Object-Relational Data Type Structure Mapping]]
 
* [[Introduction%20to%20Object-Relational%20Data%20Type%20Descriptors%20(ELUG)|Object-Relational Data Type Descriptors]]
 
 
 
 
{{EclipseLink_JPA
 
|previous=[[EclipseLink/UserGuide/JPA/Basic_JPA_Development/Mapping/Basic_Mappings/Default_Conversions_and_Converters/Converter|@TypeConverter]]
 
|next=[[EclipseLink/UserGuide/JPA/Basic_JPA_Development/Mapping/Basic_Mappings/Default_Conversions_and_Converters/Converter/StructConverter|@StructConveter]]
 
|up=[[EclipseLink/UserGuide/JPA/Basic_JPA_Development/Mapping/Basic_Mappings/Default_Conversions_and_Converters|Default Conversions and Converters]]
 
|version=2.1.0
 
}}
 

Latest revision as of 10:03, 17 June 2010

Back to the top