15.4. Class Table
Prev | Chapter 15. Mapping Metadata | Next

## 15.4. Class Table

As in persistence metadata, mapping metadata uses the `class` element and its `name` attribute to identify persistent classes. Mapping metadata, however, expands the `class` element with the `table` attribute.

The `table` attribute specifies the name of the table whose rows represent instances of this class. If the table is in a non-default schema, you can specify this attribute as `<schema-name>.<table-name>`. This attribute is optional, because not all classes must be mapped to unique tables. We explore the mapping of classes to tables in more depth in Section 15.8, “Inheritance”.

Sometimes, some of the fields in a class are mapped to secondary tables. In that case, use the class' `table` attribute to name what you consider the class' primary table. Later, we will see how to map certain fields to other tables.

The example below maps classes to tables according to the following diagram. Note that the abstract `Contract` class is left unmapped. The `SUB`, `TRIAL_SUB`, and `LINE_ITEM` tables are in the `CNTRCT` schema; all other tables are in the default schema.

Note that the example does not include our model's `Address` class in the mapping metadata document. In Chapter 5, Metadata, we defined `Address` as an embedded only class. That means that `Address` instances are only stored as part of other records; therefore `Address` does not have its own mapping.

Example 15.2. Mapping Classes

    <?xml version="1.0"?>
    <orm>
        <package name="org.mag">
            <sequence name="ArticleSeq" datastore-sequence="ART_SEQ"/>
            <class name="Magazine" table="MAG">
                ...
            </class>
            <class name="Article" table="ART">
                ...
            </class>
        </package>
        <package name="org.mag.pub">
            <sequence name="AuthorSeq" factory-class="Author$SequenceFactory"/>
            <class name="Company" table="COMP">
                ...
            </class>
            <class name="Author" table="AUTH">
                ...
            </class>
        </package>
        <package name="org.mag.subscribe">
            <sequence name="ContractSeq" strategy="transactional"/>
            <class name="Contract">
                ...
            </class>
            <class name="Subscription" table="CNTRCT.SUB">
                ...
            </class>
            <class name="LifetimeSubscription">
                ...
            </class>
            <class name="TrialSubscription" table="CNTRCT.TRIAL_SUB">
                ...
            </class>
            <class name="Subscription$LineItem" table="CNTRCT.LINE_ITEM">
                ...
            </class>
        </package>
    </orm>

Prev | Up | Next
15.3. Sequences | Home | 15.5. Datastore Identity