解读JDO规范之ORM(二)

类别:Java 点击:0 评论:0 推荐:
这是一个Class映射到多个table的情况。
一个叫做Address的类:

表结构如下:
CREATE TABLE ADDR (
    STREET VARCHAR(255) PRIMARY KEY,
    CITY VARCHAR(255),
    STATE CHAR(2),
    ZIPCODE VARCHAR(10)
)

CREATE TABLE DELIV (
    ADDR_STREET VARCHAR(255),
    SIG_REQUIRED BIT,
    DELIV_INS CLOB
)

CREATE TABLE MAPQUEST_INFO (
    ADDR_STREET VARCHAR(255),
    MAPQUEST_IMAGE BLOB
)
映射文件内容如下:
<orm>
    <package name="com.xyz">
        <class name="Address" table="ADDR">
            <!-- shared join condition used by fields in DELIV -->
            <join table="DELIV" column="ADDR_STREET"/>
            <field name="street" column="STREET"/>
            <field name="city" column="CITY"/>
            <field name="state" column="STATE"/>
            <field name="zip" column="ZIPCODE"/>
            <field name="signatureRequired" table="DELIV"  column="SIG_REQUIRED"/>
            <field name"deliveryInstructions" table="DELIV">
                <column name="DELIV_INS" jdbc-type="CLOB"/>
            </field>
            <field name="mapJPG" table="MAPQUEST_INFO"  column="MAPQUEST_IMAGE">
                <!-- join condition defined for this field only -->
                <join column="ADDR_STREET"/>
            </field>
        </class>
    </package>
</orm>
解读:
这里使用了join这个元素把多个表映射到了一个Class上,我们暂且把Class定义的Table称作是主表,其他叫做子表。使用了两种方式:
1.<join table="DELIV" column="ADDR_STREET"/>,这是设置一个共享的join元素,凡是使用table="DELIV"定义的field都是映射自表DELIV,也就是这个Class多个field映射到了一个子表上。如:<field name="signatureRequired" table="DELIV"  column="SIG_REQUIRED"/>
和 <field name"deliveryInstructions" table="DELIV">
                <column name="DELIV_INS" jdbc-type="CLOB"/>
     </field>
而column="ADDR_STREET"表明表DELIV是通过ADDR_STREET这个列来和主表(也就是ADDR)做关联的。
2.一个filed映射到一个子表:
    <field name="mapJPG" table="MAPQUEST_INFO"  column="MAPQUEST_IMAGE">
                <!-- join condition defined for this field only -->
                <join column="ADDR_STREET"/>
    </field>
    同样,join元素里的column="ADDR_STREET"表示通过ADDR_STREET这个列来和主表(也就是ADDR)做关联。

需要注意的是,关联使用的column必须是主键才行。

使用这个文件,我们就把一个Class拆开来映射到多个table上了。

本文地址:http://com.8s8s.com/it/it11499.htm