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

一、首先是一對多,多對一關聯映射,表模型就用公司表和員工表,它們的結構是公司表兩個字段:公司編號(自增長),公司名稱;員工表三個字段:員工編號(自增長),員工姓名,所屬公司編號。

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 }

相關的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>帳號</comment>
13             </column>
14         </property>
15        
16         <!-- 多對一,多個員工對應一個公司,員工表內companyId字段,對應公司表的主鍵companyId -->
17         <many-to-one name="company" column="companyId" not-null="true" />
18           </class>
19 </hibernate-mapping>

對應這4段代碼,需要注意的是:

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

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

 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>帳號</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>身份證號碼</comment>
14             </column>
15         </property>
16        <one-to-one name="user" />
17     </class>
18 </hibernate-mapping>

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

Hibernate 一對一"連接表"雙向關聯 
<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 一對一"主鍵"雙向關聯 
<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"/> 
        <!--表明主鍵由關聯屬性生成--> 
        <one-to-one name="person" cascade="all" constrained="true"/> 
    </class> 
</hibernate-mapping> 
Hibernate 一對一"外鍵"雙向關聯   
<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 多對多單向關聯 

<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 多對一"連接表"單向關聯 

<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 多對一外鍵單向關聯 

<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 一對多連接表單向關聯 

<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 一對一主鍵單向關聯 

<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 一對一外鍵單向關聯

<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 一對多外鍵單向關聯 

 <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 一對一連接表單向關聯  

<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>  



      此文部分內容來源網絡。如有侵犯您的版權問題,請來消息至電子郵件DyEngima&163.com(&換成@),經核實后會在文章內部標明來源。
轉載請注明來源http://www.aygfsteel.com/DyEnigma/
簽名:有能力、有擔當、有情義的人才能稱之為男人,而不是由性別決定。