This chapter describes the various components that you must configure in order to use a relational many-to-many mapping.
This chapter includes the following sections:
For information on how to configure TopLink mappings options common to two or more mapping types, see Chapter 121, "Configuring a Mapping".
For information on how to create TopLink mappings, see Chapter 120, "Creating a Mapping".
Table 34-1 lists the configurable options for a relational many-to-many mapping.
Table 34-1 lists the configurable options for a relational many-to-many mapping.
Table 34-1 Configurable Options for Relational Many-to-Many Mapping
Example 34-1 shows how to create a many-to-many mapping and add it to a descriptor using Java code.
Example 34-1 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" section of EclipseLink Developer's Guide at http://wiki.eclipse.org/Introduction_to_EclipseLink_JPA_%28ELUG%29#.40ManyToMany
.
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 Section 5.5, "Using Databases" for information on creating database tables.
In Figure 27-5, the
PROJ_EMP
table serves as the relation table between the PROJECT
and EMPLOYEE
tables.
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.
Figure 34-1 Table Reference Tab, Relation Table Option
Use the Relation Table field to select a database table to define this mapping.
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.
Example 34-2 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 Example 34-2 illustrates, other common API for use with many-to-many mappings include the following:
useBasicIndirection
: implements TopLink 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 Oracle Fusion Middleware Java API Reference for Oracle TopLink.