1. 程式人生 > >資料庫中表與表之間建立關係(一對多、多對多)

資料庫中表與表之間建立關係(一對多、多對多)

一、一對多的關係

例:公司與員工的關係,公司為一,公司員工為多,需要在多方建立外來鍵指向一方的主鍵。

一對多讓兩個實體類之間相互表示

(1)一個公司裡面有多個員工。

private Set<yuangong> yuangongSet=new HashSet<yuangong>(); public Set<yuangong> getYuangongSet() { return yuangongSet; } public void setYuangongSet(Set<yuangong> yuangongSet) { this.yuangongSet=yuangongSet; }

(2)一個員工只能屬於一個公司

private Gongsi gongsi; public Gongsi getGongsi() { return gongsi; } public void setGongsi(Gongsi gongsi) { this.gongsi=gongsi; }

配置一對多的對映關係,在對映檔案中配置

(1)在公司對映檔案中,表示所有員工

需要使用set標籤表示所有員工 set標籤的name屬性需要寫上在公司實體類裡面表示員工的set集合名稱,set標籤裡面還要包含一個key標籤,key標籤的column屬性需要寫實體類的外來鍵屬性名稱。 在key標籤的下面還需一個one-to-many標籤,標籤裡面的class屬性寫員工實體類的全路徑

(2)在員工對映檔案中,表示所屬公司

需要在一干涉檔案中新增many-to-one標籤,標籤的name屬性需要寫上員工實體類裡面表示公司的物件名稱,標籤的class屬性需要寫上公司類的全路徑,標籤的column屬性需要寫上外來鍵屬性名稱

建立核心配置檔案,把對映檔案引入到核心配置檔案中

<mapping resource="實體類配置檔案路徑"></mapping>

二、多對多的關係

例:商品與訂單的關係,一個商品可以屬於多個訂單,一個訂單可以有多種商品。         使用者和角色的關係,一個角色可以包括多個使用者,一個使用者可以是多個角色。 建立一張使用者表和一張角色表,還需建立一張關係表,關係表至少有兩個外來鍵,分別指向兩張表的主鍵。

1、與一對多類似,先是建立實體類,然後讓兩個實體類互相表示。

(1)以訂單和商品為例 一個訂單可以有多種商品,使用set集合表示 //一個訂單可以有多種商品
    private Set<ShangpinEntity> shangpinEntitySet=new HashSet<ShangpinEntity>();
    public Set<ShangpinEntity> getShangpinEntitySet() {
        return shangpinEntitySet;
    }
    public void setShangpinEntitySet(Set<ShangpinEntity> shangpinEntitySet) {
        this.shangpinEntitySet = shangpinEntitySet;
    }
一種商品可以屬於多個訂單,使用set集合表示     //一種商品可以屬於多個訂單
    private Set<DingdanEntity> dingdanEntitySet=new HashSet<DingdanEntity>();
    public Set<DingdanEntity> getDingdanEntitySet() {
        return dingdanEntitySet;
    }
    public void setDingdanEntitySet(Set<DingdanEntity> dingdanEntitySet) {
        this.dingdanEntitySet = dingdanEntitySet;
    }

2、配置對映關係

(1)基本配置略 (2)配置多對多關係 都是使用set標籤來表示彼此 在訂單配置檔案中配置如下標籤 <!--name="對應實體類中set集合的名稱" table="第三張表名(關係表)"-->
        <set name="shangpinEntitySet" table="dingdan_shangpin">
            <!--column="當前對映檔案在關係表中外來鍵名稱(也就是表當前主鍵)"-->
            <key column="did"></key>
            <!--class="商品表的實體類全路徑" column="商品表在關係表中的外來鍵名稱(也就是商品表的主鍵)"-->
            <many-to-many class="domain.ShangpinEntity" column="sid"></many-to-many>
        </set>
在商品配置檔案中配置如下標籤 <!--name="對應實體類中set集合的名稱" table="第三張表名(關係表)"-->
        <set name="dingdanEntitySet" table="dingdan_shangpin">
            <!--column="當前對映檔案在關係表中外來鍵名稱(也就是表當前主鍵)"-->
            <key column="sid"></key>
            <!--class="訂單表的實體類全路徑" column="訂單表在關係表中的外來鍵名稱(也就是訂單表的主鍵)"-->
            <many-to-many class="domain.DingdanEntity" column="did"></many-to-many>
        </set>

3、在核心配置檔案中引入對映檔案         <mapping resource="domain/DingdaEntity.hbm.xml"/>
        <mapping resource="domain/ShangpinEntity.hbm.xml"/>