Hibernate的映射關(guān)系很多,也比較復(fù)雜,基本上Hibernate的主要部分就是映射,這里把幾個(gè)常用的映射介紹一下,以備自己查看。

一、首先是一對(duì)多,多對(duì)一關(guān)聯(lián)映射,表模型就用公司表和員工表,它們的結(jié)構(gòu)是公司表兩個(gè)字段:公司編號(hào)(自增長(zhǎng)),公司名稱;員工表三個(gè)字段:?jiǎn)T工編號(hào)(自增長(zhǎng)),員工姓名,所屬公司編號(hào)。

Company.java里面的代碼,省略了get和set方法

 1 public class Company {
 2 
 3     Company() {
 4     }
 5 
 6     private Integer companyId;
 7     private String companyName;
 8     private Set<User> user;
 9        
10    ...
11 }

User.java里面的代碼,省略get和set方法

 1 public class User {
 2 
 3     User() {
 4     }
 5 
 6     private Integer UserId;
 7     private String userName;
 8     private Company company;
 9 
10    ...
11 }

相關(guān)的Hibernate配置文件,Company.hbm.xml

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 3 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
 4 <hibernate-mapping package="cn.dy.bean">
 5     <class name="Company" table="tb_company" catalog="learn">
 6         <id name="companyId" type="integer">
 7             <column name="companyId" />
 8             <generator class="identity" />
 9         </id>
10         <property name="companyName" type="string">
11             <column name="companyName" length="200" not-null="true">
12                 <comment>公司名稱</comment>
13             </column>
14         </property>
15         <set name="user">
16             <key column="companyId" />
17             <one-to-many class="User" />
18         </set>
19     </class>
20 </hibernate-mapping>

User.hbm.xml代碼為:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 3 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
 4 <hibernate-mapping>
 5     <class name="cn.dy.bean.User" table="tb_user" catalog="learn">
 6         <id name="userId" type="integer">
 7             <column name="userId" />
 8             <generator class="identity" />
 9         </id>
10         <property name="userName" type="string">
11             <column name="userName" length="16" not-null="true">
12                 <comment>帳號(hào)</comment>
13             </column>
14         </property>
15        
16         <!-- 多對(duì)一,多個(gè)員工對(duì)應(yīng)一個(gè)公司,員工表內(nèi)companyId字段,對(duì)應(yīng)公司表的主鍵companyId -->
17         <many-to-one name="company" column="companyId" not-null="true" />
18           </class>
19 </hibernate-mapping>

對(duì)應(yīng)這4段代碼,需要注意的是:

一對(duì)多配置
1.Company.java里面加入屬性Set<User>;
2.Company.hbm.xml文件里面加上set配置,詳細(xì)見上面代碼;
多對(duì)一配置
3.User.java里面要加入復(fù)雜屬性Company;
4.User.java里面不能出現(xiàn)屬性companyId;
5.User.hbm.xml文件加上<many-to-one>配置,column為多的那一方表的一個(gè)字段,這里是companyId,默認(rèn)對(duì)應(yīng)公司表的主鍵。

二、一對(duì)一映射,員工表和身份證號(hào)碼表(編號(hào)字段,和員工表員工編號(hào)一致;身份證號(hào)碼字段)

 1 public class User {
 2 
 3     User() {
 4     }
 5 
 6     private Integer userId;
 7     private String userName;
 8     private IdCard idCard;
 9 
10    ...
11 }

IdCard.java代碼:

 1 public class IdCard{
 2 
 3     IdCard() {
 4     }
 5 
 6     private Integer id;
 7     private String cardNum;
 8     private User user;
 9 
10   ...
11 }

User.hbm.xml代碼

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 3 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
 4 <hibernate-mapping>
 5     <class name="cn.dy.bean.User" table="tb_user" catalog="learn">
 6         <id name="userId" type="integer">
 7             <column name="userId" />
 8             <generator class="identity" />
 9         </id>
10         <property name="userName" type="string">
11             <column name="userName" length="16" not-null="true">
12                 <comment>帳號(hào)</comment>
13             </column>
14         </property>
15       <one-to-one name="idCard" />
16           </class>
17 </hibernate-mapping>

IdCard.hbm.xml代碼

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 3 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
 4 <hibernate-mapping>
 5     <class name="cn.dy.bean.IdCard" table="tb_idCard" catalog="learn">
 6         <id name="id">
 7             <generator class="foreign">
 8                 <param name="property">user</param>
 9             </generator>
10         </id>
11         <property name="cardNum" type="string">
12             <column name="cardName" length="18" not-null="true">
13                 <comment>身份證號(hào)碼</comment>
14             </column>
15         </property>
16        <one-to-one name="user" />
17     </class>
18 </hibernate-mapping>

三、摘編的其他網(wǎng)站信息:(技術(shù)是讓使用的,而不是一種桎梏,所以要靈活利用,不能說(shuō)我使用Hibernate就必須用映射,有時(shí)候還要考慮效率問(wèn)題,具體自己把握吧)

Hibernate 一對(duì)一"連接表"雙向關(guān)聯(lián) 
<hibernate-mapping> 
    <class name="cn.dy.Person" table="PERSON"> 
        <id name="personId"> 
            <generator class="identity"/> 
        </id> 
        <property name="name"/> 
        <property name="age"/> 
        <join table="join" optional="true"> 
         <key column="personId"  unique="true"/> 
         <many-to-one name="address" column="addressId" not-null="true" unique="true"/>
        </join> 
    </class> 
</hibernate-mapping> 
<hibernate-mapping> 
    <class name="cn.dy.Address" table="ADDRESS"> 
        <id name="addressId"> 
            <generator class="identity"/> 
        </id> 
        <property name="addressDetail"/> 
        <join table="join" optional="true" inverse="true"> 
          <key column="addressId" unique="true"/> 
          <many-to-one name="person" column="personId" not-null="true" unique="true"/> 
        </join> 
    </class> 
</hibernate-mapping> 

Hibernate 一對(duì)一"主鍵"雙向關(guān)聯(lián) 
<hibernate-mapping> 
    <class name="cn.dy.Person" table="PERSON"> 
        <id name="personId"> 
            <generator class="identity"/> 
        </id> 
        <property name="name"/> 
        <property name="age"/> 
        <one-to-one name="address" cascade="all"/> 
    </class> 
</hibernate-mapping> 
<hibernate-mapping> 
    <class name="cn.dy.Address" table="ADDRESS"> 
        <id name="addressId"> 
            <generator class="foreign"> 
                <param name="property">person</param> 
            </generator> 
        </id> 
        <property name="addressDetail"/> 
        <!--表明主鍵由關(guān)聯(lián)屬性生成--> 
        <one-to-one name="person" cascade="all" constrained="true"/> 
    </class> 
</hibernate-mapping> 
Hibernate 一對(duì)一"外鍵"雙向關(guān)聯(lián)   
<hibernate-mapping>   
    <class name="cn.dy.Person" table="PERSON">   
        <id name="personId">   
            <generator class="identity"/>   
        </id>   
        <property name="name"/>   
        <property name="age"/>   
        <one-to-one name="address" cascade="all" property-ref="person"/>   
    </class>   
</hibernate-mapping>    
<hibernate-mapping>   
    <class name="cn.dy.Address" table="ADDRESS">   
        <id name="addressId">   
            <generator class="identity"/>   
        </id>   
        <property name="addressDetail"/>   
        <many-to-one name="person" unique="true"/>   
    </class>   
</hibernate-mapping>   

Hibernate 多對(duì)多單向關(guān)聯(lián) 

<hibernate-mapping> 
    <class name="cn.dy.Person" table="PERSON"> 
        <id name="personId"> 
            <generator class="identity"/> 
        </id> 
        <property name="name"/> 
        <property name="age"/> 
        <!--映射集合屬性,join是連接表表名--> 
        <set name="addresses" table="join" > 
           <key column="personId"/> 
             <many-to-many  column="addressId" class="cn.dy.Address"/> 
        </set> 
    </class> 
</hibernate-mapping> 
<hibernate-mapping> 
    <class name="cn.dy.Address" table="ADDRESS"> 
        <id name="addressId"> 
            <generator class="identity"/> 
        </id> 
        <property name="addressDetail"/> 
    </class> 
</hibernate-mapping> 
Hibernate 多對(duì)一"連接表"單向關(guān)聯(lián) 

<hibernate-mapping> 
    <class name="cn.dy.Person" table="PERSON"> 
        <id name="personId"> 
            <generator class="identity"/> 
        </id> 
        <property name="name"/> 
        <property name="age"/> 
            <join table="join"> 
             <key column="personId"/> 
            <many-to-one name="address"/> 
        </join> 
    </class> 
</hibernate-mapping> 
<hibernate-mapping> 
    <class name="cn.dy.Address" table="ADDRESS"> 
        <id name="addressId"> 
            <generator class="identity"/> 
        </id> 
        <property name="addressDetail"/> 
    </class> 
</hibernate-mapping> 

Hibernate 多對(duì)一外鍵單向關(guān)聯(lián) 

<hibernate-mapping> 
    <class name="cn.dy.Person" table="PERSON"> 
        <id name="personId"> 
            <generator class="identity"/> 
        </id> 
        <property name="name"/> 
        <property name="age"/> 
        <many-to-one name="address" column="addressId"/> 
    </class> 
</hibernate-mapping> 
<hibernate-mapping> 
    <class name="cn.dy.Address" table="ADDRESS"> 
        <id name="addressId"> 
            <generator class="identity"/> 
        </id> 
        <property name="addressDetail"/> 
    </class> 
</hibernate-mapping> 

Hibernate 一對(duì)多連接表單向關(guān)聯(lián) 

<hibernate-mapping> 
    <class name="cn.dy.Person" table="PERSON"> 
        <id name="personId"> 
            <generator class="identity"/> 
        </id> 
        <property name="name"/> 
        <property name="age"/> 
           <set name="addresses" table="join" > 
            <key column="personId"/> 
            <many-to-many column="addressId" unique="true" class="cn.dy.Address"/> 
        </set> 
    </class> 
</hibernate-mapping> 
<hibernate-mapping> 
    <class name="cn.dy.Address" table="ADDRESS"> 
        <id name="addressId"> 
            <generator class="identity"/> 
        </id> 
        <property name="addressDetail"/> 
    </class> 
</hibernate-mapping> 
Hibernate 一對(duì)一主鍵單向關(guān)聯(lián) 

<id name="personId"> 
<generator class="foreign"> 
<param name="property">address</param> 
</generator> 
</id> 
<one-to-one name="address" constrained="true"/> 
<hibernate-mapping> 
    <class name="cn.dy.Person" table="PERSON"> 
        <id name="personId" column="presonid"> 
         <generator class="foreign"> 
<param name="property">address</param> 
            </generator> 
        </id> 
        <property name="name"/> 
        <property name="age"/> 
  <one-to-one name="address" constrained="true"/> 
    </class> 
</hibernate-mapping> 
<hibernate-mapping> 
    <class name="cn.dy.Address" table="ADDRESS"> 
        <id name="addressId"> 
            <generator class="identity"/> 
        </id> 
        <property name="addressDetail"/> 
    </class> 
</hibernate-mapping> 

Hibernate 一對(duì)一外鍵單向關(guān)聯(lián)

<many-to-one name="address" column="addressId" unique="true"/>
<hibernate-mapping>
    <class name="cn.dy.Address" table="ADDRESS">
        <id name="addressId">
            <generator class="identity"/>
        </id>
        <property name="addressDetail"/>
    </class>
</hibernate-mapping>
<hibernate-mapping>
    <class name="cn.dy.Person" table="PERSON">
        <id name="personId">
            <generator class="identity"/>
        </id>
        <property name="name"/>
        <property name="age"/>
        <many-to-one name="address" column="addressId" unique="true"/>
    </class>
</hibernate-mapping>

Hibernate 一對(duì)多外鍵單向關(guān)聯(lián) 

 <set name="addresses"  table="ADDRESS"  cascade="all" > 
       <key column="personid"/> 
       <one-to-many class="cn.dy..Address"/> 
 </set> 
<hibernate-mapping> 
    <class name="cn.dy.Person" table="PERSON"> 
        <id name="personid"> 
            <generator class="identity"/> 
        </id> 
        <property name="name"/> 
        <property name="age"/> 
        <set name="addresses"  table="ADDRESS" cascade="all" > 
            <key column="personid"/> 
            <one-to-many class="cn.dy..Address"/> 
        </set> 
    </class> 
</hibernate-mapping> 
<hibernate-mapping> 
    <class name="cn.dy.Address" table="ADDRESS"> 
        <id name="addressid"> 
            <generator class="identity"/> 
        </id> 
        <property name="addressdetail"/> 
    </class> 
</hibernate-mapping>  

Hibernate 一對(duì)一連接表單向關(guān)聯(lián)  

<join table="join"> 
<key column="personid"/> 
<many-to-one name="address" unique="true"/> 
</join> 
<hibernate-mapping> 
    <class name="cn.dy.Person" table="PERSON"> 
        <id name="personid"> 
            <generator class="identity"/> 
        </id> 
        <property name="name"/> 
        <property name="age"/> 
            <join table="join"> 
            <key column="personid"/> 
            <many-to-one name="address" unique="true"/> 
        </join> 
    </class> 
</hibernate-mapping> 
<hibernate-mapping> 
    <class name="cn.dy.Address" table="ADDRESS"> 
        <id name="addressid"> 
            <generator class="identity"/> 
        </id> 
        <property name="addressdetail"/> 
    </class> 
</hibernate-mapping>  



      此文部分內(nèi)容來(lái)源網(wǎng)絡(luò)。如有侵犯您的版權(quán)問(wèn)題,請(qǐng)來(lái)消息至電子郵件DyEngima&163.com(&換成@),經(jīng)核實(shí)后會(huì)在文章內(nèi)部標(biāo)明來(lái)源。
轉(zhuǎn)載請(qǐng)注明來(lái)源http://www.tkk7.com/DyEnigma/
簽名:有能力、有擔(dān)當(dāng)、有情義的人才能稱之為男人,而不是由性別決定。