component映射

 

hibernate,component是某个实体的逻辑组成部分,它与实体的根本区别是没有oid

component可以成为是值对象(DDD

 

采用component映射的好处:它实现了对象模型的细粒度划分,层次会更分明,复用率会更高

       <class name="com.bjsxt.hibernate.User" table="t_user">

              <id name="id">

                     <generator class="native"/>

              </id>

              <property name="name"/>

              <component name="contact">

                     <property name="email"/>

                     <property name="address"/>

                     <property name="zipCode"/>

                     <property name="contactTel"/>

              </component>

       </class>

 

对应表还是一张User表只是对象力度细分

 

              User user = new User();

                     user.setName("张三");

                    

                     Contact contact = new Contact();

                     contact.setAddress("xxxxx");

                     contact.setEmail("xxx@rrr.com");

                     contact.setZipCode("1111111");

                     contact.setContactTel("9999999999");

                    

                     user.setContact(contact);

                    

                     session.save(user);

 

复合主键映射

复合(联合)主键映射

 

通常将复合主键相关的属性,单独放到一个类中

       * 此类必须实现序列化接口

       * 覆写hashcodeequals方法

 

       public class FiscalYearPeriodPK implements Serializable {

 

       //核算年

       private int fiscalYear;

      

       //核算月

       private int fiscalPeriod;

 

       public int getFiscalYear() {

              return fiscalYear;

       }

 

       public void setFiscalYear(int fiscalYear) {

              this.fiscalYear = fiscalYear;

       }

 

       public int getFiscalPeriod() {

              return fiscalPeriod;

       }

 

       public void setFiscalPeriod(int fiscalPeriod) {

              this.fiscalPeriod = fiscalPeriod;

       }

 

       @Override

       public int hashCode() {

              final int prime = 31;

              int result = 1;

              result = prime * result + fiscalPeriod;

              result = prime * result + fiscalYear;

              return result;

       }

 

       @Override

       public boolean equals(Object obj) {

              if (this == obj)

                     return true;

              if (obj == null)

                     return false;

              if (getClass() != obj.getClass())

                     return false;

              final FiscalYearPeriodPK other = (FiscalYearPeriodPK) obj;

              if (fiscalPeriod != other.fiscalPeriod)

                     return false;

              if (fiscalYear != other.fiscalYear)

                     return false;

              return true;

       }

      

}

 

       <class name="com.bjsxt.hibernate.FiscalYearPeriod" table="t_fiscal_year_period">

              <composite-id name="fiscalYearPeriodPK">

                     <key-property name="fiscalYear"/>

                     <key-property name="fiscalPeriod"/>  

              </composite-id>

              <property name="beginDate"/>

              <property name="endDate"/>

              <property name="periodSts"/>

       </class>

 

在继承映射中如果classabstract属性设成true就不会生成表

 

set

list

array

map 

t_CollectionMapping

id

name

1

xxx

 

t_set_values

set_id

set_value

1

a

1

b

 

t_list_value

list_id

list_value

list_index

1

c

0

1

d

1

 

t_array_value

array_id

array_value

array_index

1

e

0

1

f

1

 

t_map_value

map_id

map_key

map_value

1

k1

v1

1

k2

v2

 

              <id name="id">

                     <generator class="native"/>

              </id>

              <property name="name"/>

              <set name="setValue" table="t_set_value">

                     <key column="set_id"/>

                     <element type="string" column="set_value"/>

              </set>

              <list name="listValue" table="t_list_value">

                     <key column="list_id"/>

                     <list-index column="list_index"/>//为了保存顺序

                     <element type="string" column="list_value"/>

              </list>

              <array name="arrayValue" table="t_array_value">

                     <key column="array_id"/>

                     <list-index column="array_index"/>

                     <element type="string" column="array_value"/>

              </array>

              <map name="mapValue" table="t_map_value">

                     <key column="map_id"/>

                     <map-key type="string" column="map_key"/>

                     <element type="string" column="map_value"/>

              </map>

posted on 2009-05-06 21:49  IT Person  阅读(266)  评论(0)    收藏  举报