| 
         
     
     | 
     | 
    
  
    | 
    解读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上了。
 
  
 
  | 
   
  
     | 
   
  
     相关文章:相关软件:  | 
   
   
      |