组成关系映射(映射文件)


hiberante应用开发中,为了提高代码的可重用性,往往需要将一个较大的持久化类分解成两个较小的持久化类,且其中的一个持久化类是另一个持久化类的组成部分。

例如:t_customer(顾客表)如下:

      

create table if not exists webdb.t_customer(

         id int(11) not null,

         name varchar(20) not null,         --顾客姓名

          linkmen varchar(20) not null,      --联系人

          phone    char(14)                   --联系电话 

          province  varchar(40),             --地址(省份)

          city      varchar(40),              --地址(地市)

          street    varchar(100),             --地址(街道)

          zipcode   char(8),                  --地址(邮编)

         PRIMARY key (id),

          Unique  key address_id (address_id)

     )ENGINE=InnoDB  DEFAULT CHARSET=utf-8 COLLATE=utf8_unicode_ci;


     在设计持久化类时,为了提高代码的可重用性,将省份、地市、街道及邮编单独设计成一个持久化类Address,Address的实例充当Customer的属性,这就是典型的组成关系。


 public class Customer{

       private Integer id;

       private String name;

       private String linkman;

       Private String phone;

       private Address address;

      .  .  .

 }


 public class Address{

       private String province;

       private String city;

       private String street;

       private String zipcode;

       Private Customer  customer;

      .  .  .

 }


 Customer.hbm.xml:

   <class name="org.hibernate.test.Customer"  table="t_customer">

        <id name="id" column="id" type="int">

            <generator class="native"/>

        id>

          <property name="name" column="name" type="string"/>

           <property name="linkman" column="linkman" type="string"/>

           <property name="phone" column="phone" type="string"/>

            

            <component name="address" class="org.hibernate.test.Address">

                 <parent name="customer"/> 

                 

                 <property name="province" column="province" type="string"/>

                 <property name="city" column="city" type="string"/>

                 <property name="street" column="street" type="string"/>

                 <property name="zipcode" column="zipcode" type="string"/>

             component>

  class>