Skip Headers
Oracle TopLink Developer's Guide
10g Release 3 (10.1.3)
B13593-01
  Go To Documentation Library
Home
Go To Product List
Solution Area
Go To Table Of Contents
Contents
Go To Index
Index

Previous
Previous
Next
Next
 

Creating a Relational Descriptor

You can create a relational descriptor using TopLink Workbench (see "Using TopLink Workbench") or Java code (see "Using Java"). Oracle recommends that you use TopLink Workbench to create and manage your relational descriptors.

For more information, see "Relational Descriptors".

Using TopLink Workbench

Using TopLink Workbench, you can create the following types of descriptor in a relational project:

Relational Class Descriptors

Class descriptor icon.
By default, when you add a Java class to a relational project (see "Configuring Project Classpath"), TopLink Workbench creates a relational class descriptor for it. A class descriptor is applicable to any persistent object except an object that is owned by another in an aggregate relationship. In this case, you must describe the owned object with an aggregate descriptor (see "Relational Aggregate Descriptors"). Using a class descriptor, you can configure any relational mapping except aggregate collection and aggregate object mappings.

Relational Aggregate Descriptors

Aggregate Descriptor button.
An aggregate object is an object that is strictly dependent on its owning object. Aggregate descriptors do not define a table, primary key, or many of the standard descriptor options as they obtain these from their owning descriptor. If you want to configure an aggregate mapping to associate data members in a target object with fields in a source object's underlying database tables (see "Configuring a Relational Aggregate Collection Mapping" and "Configuring a Relational Aggregate Object Mapping"), you must designate the target object's descriptor as an aggregate (see "Configuring a Relational Descriptor as a Class or Aggregate Type").

Relational Interface Descriptors

Class descriptor icon.
If you add an interface to a relational project (see "Configuring Project Classpath"), TopLink Workbench creates an interface descriptor for it.

An interface is a collection of abstract behavior that other classes can use. It is a purely Java concept and has no representation on the relational database. Therefore, a descriptor defined for the interfaces does not map any relational entities on the database.

The interface descriptor includes the following elements:

  • The Java interface it describes.

  • The parent interface(s) it implements.

  • A list of abstract query keys.

An interface descriptor does not define any mappings, because there is no concrete data or table associated with it. A list of abstract query keys is defined so that you can issue queries on the interfaces (see "Configuring Interface Query Keys"). A read query on the interface results in reading one or more of its implementors.

Using Java

Example 27-1 shows how to create a relational descriptor using Java code.

Example 27-1 Creating a Relational Descriptor in Java

RelationalDescriptor descriptor = new RelationalDescriptor();
descriptor.setJavaClass(YourClass.class);

To designate a relational descriptor as an aggregate, use ClassDescriptor method descriptorIsAggregate. For a RelationalDescriptor configured as an aggregate, you do not define a primary key, but when using Java, you must configure the associated table (see "Configuring Associated Tables") and field mappings (see "Understanding Mappings").

To allow a relational descriptor to participate in an aggregate collection mapping (see "Aggregate Collection Mapping"), use ClassDescriptor method descriptorIsAggregateCollection. For a RelationalDescriptor configured for use with an aggregate collection mapping, you do define primary keys (see "Configuring Primary Keys") and an associated table (see "Configuring Associated Tables"), but you do not have to map the primary keys if they are shared from their parent.

To configure a relational descriptor for an interface, use ClassDescriptor method setJavaInterface, passing in the java.lang.Class of the interface. You should only use an interface descriptor for an interface that has multiple implementors. If an interface has only a single implementor, then rather than creating an interface descriptor, just set the implementor descriptor's interface alias (see "Configuring Interface Alias").