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 "Configuring a Relational Many-to-Many Mapping (ELUG)"
m (→Introduction to Relational Many-to-Many Mapping Configuration) |
m (→How to Configure a Relation Table Using Java) |
||
(9 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
<div style="float:right;border:1px solid #000000;padding:5px">__TOC__ | <div style="float:right;border:1px solid #000000;padding:5px">__TOC__ | ||
[[Special:Whatlinkshere/Configuring a Relational Many-to-Many Mapping (ELUG)|Related Topics]]</div> | [[Special:Whatlinkshere/Configuring a Relational Many-to-Many Mapping (ELUG)|Related Topics]]</div> | ||
− | |||
− | |||
− | |||
For information on how to create EclipseLink mappings, see [[Creating%20a%20Mapping%20(ELUG)|Creating a Mapping]]. | For information on how to create EclipseLink mappings, see [[Creating%20a%20Mapping%20(ELUG)|Creating a Mapping]]. | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
This table lists the configurable options for a relational many-to-many mapping. | This table lists the configurable options for a relational many-to-many mapping. | ||
− | |||
<span id="Table 39-1"> | <span id="Table 39-1"> | ||
− | |||
− | {| class="RuleFormalMax" dir="ltr" title="Configurable Options for Relational Many-to-Many Mapping" summary="This table lists the configurable options common to Relational Many-to-Many Mapping and categorizes them as Basic and Advanced and indicates if the option can be configured with the | + | {| class="RuleFormalMax" dir="ltr" title="Configurable Options for Relational Many-to-Many Mapping" summary="This table lists the configurable options common to Relational Many-to-Many Mapping and categorizes them as Basic and Advanced and indicates if the option can be configured with the Workbench, Java, or both." width="100%" border="1" frame="border" rules="all" cellpadding="3" frame="border" rules="all" |
|- align="left" valign="top" | |- align="left" valign="top" | ||
! id="r1c1-t2" align="left" valign="bottom" | '''Option to Configure''' | ! id="r1c1-t2" align="left" valign="bottom" | '''Option to Configure''' | ||
Line 26: | Line 15: | ||
|- align="left" valign="top" | |- align="left" valign="top" | ||
| id="r2c1-t2" headers="r1c1-t2" align="left" | | | id="r2c1-t2" headers="r1c1-t2" align="left" | | ||
− | + | [[Configuring%20a%20Relational%20Mapping%20(ELUG)#Configuring Reference Descriptor|Configuring Reference Descriptor]] | |
| headers="r2c1-t2 r1c2-t2" align="left" | | | headers="r2c1-t2 r1c2-t2" align="left" | | ||
[[Image:support.gif|Supported]] | [[Image:support.gif|Supported]] | ||
Line 33: | Line 22: | ||
|- align="left" valign="top" | |- align="left" valign="top" | ||
| id="r3c1-t2" headers="r1c1-t2" align="left" | | | id="r3c1-t2" headers="r1c1-t2" align="left" | | ||
− | + | [[Configuring%20a%20Mapping%20(ELUG)#Configuring Method or Direct Field Accessing at the Mapping Level|Method or direct field access ]] | |
| headers="r3c1-t2 r1c2-t2" align="left" | | | headers="r3c1-t2 r1c2-t2" align="left" | | ||
[[Image:support.gif|Supported]] | [[Image:support.gif|Supported]] | ||
Line 40: | Line 29: | ||
|- align="left" valign="top" | |- align="left" valign="top" | ||
| id="r4c1-t2" headers="r1c1-t2" align="left" | | | id="r4c1-t2" headers="r1c1-t2" align="left" | | ||
− | + | [[Configuring%20a%20Mapping%20(ELUG)#Configuring Read-Only Mappings|Read-only mapping]] | |
| headers="r4c1-t2 r1c2-t2" align="left" | | | headers="r4c1-t2 r1c2-t2" align="left" | | ||
[[Image:support.gif|Supported]] | [[Image:support.gif|Supported]] | ||
Line 47: | Line 36: | ||
|- align="left" valign="top" | |- align="left" valign="top" | ||
| id="r5c1-t2" headers="r1c1-t2" align="left" | | | id="r5c1-t2" headers="r1c1-t2" align="left" | | ||
− | + | [[Configuring%20a%20Mapping%20(ELUG)#Configuring Private or Independent relationships|Private or Independent relationships]] | |
| headers="r5c1-t2 r1c2-t2" align="left" | | | headers="r5c1-t2 r1c2-t2" align="left" | | ||
[[Image:support.gif|Supported]] | [[Image:support.gif|Supported]] | ||
Line 54: | Line 43: | ||
|- align="left" valign="top" | |- align="left" valign="top" | ||
| id="r6c1-t2" headers="r1c1-t2" align="left" | | | id="r6c1-t2" headers="r1c1-t2" align="left" | | ||
− | + | [[Configuring%20a%20Relational%20Mapping%20(ELUG)#Configuring Batch Reading|Batch reading]] | |
| headers="r6c1-t2 r1c2-t2" align="left" | | | headers="r6c1-t2 r1c2-t2" align="left" | | ||
[[Image:support.gif|Supported]] | [[Image:support.gif|Supported]] | ||
Line 61: | Line 50: | ||
|- align="left" valign="top" | |- align="left" valign="top" | ||
| id="r7c1-t2" headers="r1c1-t2" align="left" | | | id="r7c1-t2" headers="r1c1-t2" align="left" | | ||
− | + | [[Configuring%20a%20Mapping%20(ELUG)#Configuring Indirection (lazy loading)|Indirection (lazy loading)]] | |
| headers="r7c1-t2 r1c2-t2" align="left" | | | headers="r7c1-t2 r1c2-t2" align="left" | | ||
[[Image:support.gif|Supported]] | [[Image:support.gif|Supported]] | ||
Line 68: | Line 57: | ||
|- align="left" valign="top" | |- align="left" valign="top" | ||
| id="r8c1-t2" headers="r1c1-t2" align="left" | | | id="r8c1-t2" headers="r1c1-t2" align="left" | | ||
− | + | [[Configuring%20a%20Mapping%20(ELUG)#Configuring Bidirectional Relationship|Bidirectional relationship ]] | |
| headers="r8c1-t2 r1c2-t2" align="left" | | | headers="r8c1-t2 r1c2-t2" align="left" | | ||
[[Image:support.gif|Supported]] | [[Image:support.gif|Supported]] | ||
Line 75: | Line 64: | ||
|- align="left" valign="top" | |- align="left" valign="top" | ||
| id="r9c1-t2" headers="r1c1-t2" align="left" | | | id="r9c1-t2" headers="r1c1-t2" align="left" | | ||
− | + | [[Configuring%20a%20Mapping%20(ELUG)#Configuring Mapping Comments|Container policy]] | |
| headers="r9c1-t2 r1c2-t2" align="left" | | | headers="r9c1-t2 r1c2-t2" align="left" | | ||
[[Image:support.gif|Supported]] | [[Image:support.gif|Supported]] | ||
Line 82: | Line 71: | ||
|- align="left" valign="top" | |- align="left" valign="top" | ||
| id="r10c1-t2" headers="r1c1-t2" align="left" | | | id="r10c1-t2" headers="r1c1-t2" align="left" | | ||
− | + | [[Configuring%20a%20Mapping%20(ELUG)#Configuring Mapping Comments|Mapping comments]] | |
| headers="r10c1-t2 r1c2-t2" align="left" | | | headers="r10c1-t2 r1c2-t2" align="left" | | ||
[[Image:support.gif|Supported]] | [[Image:support.gif|Supported]] | ||
Line 89: | Line 78: | ||
|- align="left" valign="top" | |- align="left" valign="top" | ||
| id="r11c1-t2" headers="r1c1-t2" align="left" | | | id="r11c1-t2" headers="r1c1-t2" align="left" | | ||
− | + | [[#Configuring a Relation Table|Relational table ]] | |
| headers="r11c1-t2 r1c2-t2" align="left" | | | headers="r11c1-t2 r1c2-t2" align="left" | | ||
[[Image:support.gif|Supported]] | [[Image:support.gif|Supported]] | ||
Line 96: | Line 85: | ||
|- align="left" valign="top" | |- align="left" valign="top" | ||
| id="r12c1-t2" headers="r1c1-t2" align="left" | | | id="r12c1-t2" headers="r1c1-t2" align="left" | | ||
− | + | [[Configuring%20a%20Relational%20Mapping%20(ELUG)#Configuring Table and Field References (Foreign and Target Foreign Keys)|Table and field references ]] (Source) | |
| headers="r12c1-t2 r1c2-t2" align="left" | | | headers="r12c1-t2 r1c2-t2" align="left" | | ||
[[Image:support.gif|Supported]] | [[Image:support.gif|Supported]] | ||
Line 103: | Line 92: | ||
|- align="left" valign="top" | |- align="left" valign="top" | ||
| id="r13c1-t2" headers="r1c1-t2" align="left" | | | id="r13c1-t2" headers="r1c1-t2" align="left" | | ||
− | + | [[Configuring%20a%20Relational%20Mapping%20(ELUG)#Configuring Table and Field References (Foreign and Target Foreign Keys)|Table and field references ]] (Target) | |
| headers="r13c1-t2 r1c2-t2" align="left" | | | headers="r13c1-t2 r1c2-t2" align="left" | | ||
[[Image:support.gif|Supported]] | [[Image:support.gif|Supported]] | ||
Line 110: | Line 99: | ||
|- align="left" valign="top" | |- align="left" valign="top" | ||
| id="r14c1-t2" headers="r1c1-t2" align="left" | | | id="r14c1-t2" headers="r1c1-t2" align="left" | | ||
− | + | [[Configuring%20a%20Relational%20Mapping%20(ELUG)#Configuring Query Key Order|Query key order ]] | |
| headers="r14c1-t2 r1c2-t2" align="left" | | | headers="r14c1-t2 r1c2-t2" align="left" | | ||
[[Image:support.gif|Supported]] | [[Image:support.gif|Supported]] | ||
Line 136: | Line 125: | ||
For more information, see the following: | For more information, see the following: | ||
− | + | * [[Introduction%20to%20Relational%20Mappings%20(ELUG)#Many-to-Many Mapping|Many-to-Many Mapping]] | |
− | * [[Introduction%20to%20Relational%20Mappings%20(ELUG)|Many-to-Many Mapping]] | + | |
* [[Configuring%20a%20Relational%20Mapping%20(ELUG)|Configuring a Relational Mapping]] | * [[Configuring%20a%20Relational%20Mapping%20(ELUG)|Configuring a Relational Mapping]] | ||
− | * [[ | + | * [[Configuring%20a%20Mapping%20(ELUG)|Configuring a Mapping]]. |
− | For information on using JPA to configure many-to-many mappings, see [[Introduction%20to%20EclipseLink%20JPA%20(ELUG)|@ManyToMany]]. | + | For information on using JPA to configure many-to-many mappings, see [[Introduction%20to%20EclipseLink%20JPA%20(ELUG)#@ManyToMany|@ManyToMany]]. |
− | |||
− | |||
− | + | ==Configuring a Relation Table== | |
+ | |||
+ | The relation table contains the columns for the primary keys of the source table and target table involved in the many-to-many mapping. You must create this table in the database before completing the mapping. See [[Using%20Workbench%20(ELUG)#Using Databases|Using Databases]] for information on creating database tables. | ||
+ | In the [[Introduction%20to%20Relational%20Mappings%20(ELUG)#Figure 32-5|Many-to-Many Relationships ]] figure, the <tt>PROJ_EMP</tt> table serves as the relation table between the <tt>PROJECT</tt> and <tt>EMPLOYEE</tt> tables. | ||
Line 155: | Line 144: | ||
To select a relation table for a mapping, use this procedure: | To select a relation table for a mapping, use this procedure: | ||
− | |||
# Select the mapped attribute in the '''Navigator'''. Its properties appear in the Editor. | # Select the mapped attribute in the '''Navigator'''. Its properties appear in the Editor. | ||
− | # Click the '''General''' tab. The General tab appears.<br>''''' | + | # Click the '''General''' tab. The General tab appears.<br><span id="Figure 39-1"></span>''''' Table Reference Tab, Relation Table Option'''''<br>[[Image:mmreltabl.gif|Table Reference Tab, Relation Table Option]] |
− | + | #Use the '''Relation Table''' field to select a database table to define this mapping. | |
− | Use the '''Relation Table''' field to select a database table to define this mapping. | + | |
− | + | ||
− | + | ||
Line 169: | Line 154: | ||
Many-to-many mappings are instances of the <tt>ManyToManyMapping</tt> class and requires the following elements: | Many-to-many mappings are instances of the <tt>ManyToManyMapping</tt> class and requires the following elements: | ||
− | |||
* The attribute mapped, set by using the <tt>setAttributeName</tt> method. | * The attribute mapped, set by using the <tt>setAttributeName</tt> method. | ||
* The reference class, set by using the <tt>setReferenceClass</tt> method. | * The reference class, set by using the <tt>setReferenceClass</tt> method. | ||
Line 196: | Line 180: | ||
In addition to the API that [[#Example 39-1|Configuring a Relational Table]] illustrates, other common API for use with many-to-many mappings include the following: | In addition to the API that [[#Example 39-1|Configuring a Relational Table]] illustrates, other common API for use with many-to-many mappings include the following: | ||
− | |||
− | |||
− | |||
* <tt>useBasicIndirection</tt><nowiki>: implements EclipseLink value holder indirection.</nowiki> | * <tt>useBasicIndirection</tt><nowiki>: implements EclipseLink value holder indirection.</nowiki> | ||
* <tt>useTransparentCollection</tt><nowiki>: if you use transparent indirection, this element places a special collection in the source object's attribute.</nowiki> | * <tt>useTransparentCollection</tt><nowiki>: if you use transparent indirection, this element places a special collection in the source object's attribute.</nowiki> | ||
Line 204: | Line 185: | ||
For more information about the available methods for <tt>ManyToManyMapping</tt>, see the ''EclipseLink API Reference''. | For more information about the available methods for <tt>ManyToManyMapping</tt>, see the ''EclipseLink API Reference''. | ||
+ | |||
+ | |||
Line 211: | Line 194: | ||
[[Category: EclipseLink User's Guide]] | [[Category: EclipseLink User's Guide]] | ||
− | [[Category: | + | [[Category: Release 1]] |
[[Category: Task]] | [[Category: Task]] | ||
+ | [[Category: ORM]] |
Latest revision as of 07:38, 20 August 2008
Contents
For information on how to create EclipseLink mappings, see Creating a Mapping.
This table lists the configurable options for a relational many-to-many mapping.
Option to Configure | Workbench | Java |
---|---|---|
Table and field references (Source) |
||
Table and field references (Target) |
||
This example shows how to create a many-to-many mapping and add it to a descriptor using Java code.
Many-to-Many Mapping
public void customize(ClassDescriptor descriptor) { ManyToManyMapping mapping = new ManyToManyMapping(); // configure mapping ... // add mapping to descriptor descriptor.addMapping(mapping); }
For more information, see the following:
For information on using JPA to configure many-to-many mappings, see @ManyToMany.
Configuring a Relation Table
The relation table contains the columns for the primary keys of the source table and target table involved in the many-to-many mapping. You must create this table in the database before completing the mapping. See Using Databases for information on creating database tables.
In the Many-to-Many Relationships figure, the PROJ_EMP table serves as the relation table between the PROJECT and EMPLOYEE tables.
How to Configure a Relation Table Using Workbench
To select a relation table for a mapping, use this procedure:
- Select the mapped attribute in the Navigator. Its properties appear in the Editor.
- Click the General tab. The General tab appears.
Table Reference Tab, Relation Table Option - Use the Relation Table field to select a database table to define this mapping.
How to Configure a Relation Table Using Java
Many-to-many mappings represent the relationships between a collection of source objects and a collection of target objects. This requires an intermediate table that manages the associations between the source and target records.
Many-to-many mappings are instances of the ManyToManyMapping class and requires the following elements:
- The attribute mapped, set by using the setAttributeName method.
- The reference class, set by using the setReferenceClass method.
- The relation table, set by using the setRelationTableName() method.
- The foreign key information (for noncomposite target primary keys), which you specify by calling the setSourceRelationKeyFieldName and setTargetRelationKeyFieldName methods.
- The foreign key information if the source or target primary keys are composite, which you specify by sending the addSourceRelationKeyFieldName or addTargetRelationKeyFieldName methods.
Configuring a Relational Table
public void customize(ClassDescriptor descriptor) { // In the Employee class, create the mapping that references Project class ManyToManyMapping manyToManyMapping = new ManyToManyMapping(); manyToManyMapping.setAttributeName("projects"); manyToManyMapping.setReferenceClass(Project.class); // Configure the relational table manyToManyMapping.setRelationTableName("PROJ_EMP"); manyToManyMapping.setSourceRelationKeyFieldName ("EMPID"); manyToManyMapping.setTargetRelationKeyFieldName ("PROJID"); // Add mapping to descriptor descriptor.addMapping(manyToManyMapping); }
In addition to the API that Configuring a Relational Table illustrates, other common API for use with many-to-many mappings include the following:
- useBasicIndirection: implements EclipseLink value holder indirection.
- useTransparentCollection: if you use transparent indirection, this element places a special collection in the source object's attribute.
- dontUseIndirection: implements no indirection.
For more information about the available methods for ManyToManyMapping, see the EclipseLink API Reference.