解读JDO规范之ORM(二)

王朝java/jsp·作者佚名  2006-01-09
宽屏版  字体: |||超大  

这是一个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上了。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有