|
|
解读JDO规范之ORM(二) |
|
|
作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站 |
这是一个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上了。

|
|
相关文章:相关软件: |
|