Hibernate學習筆記(3)---hibernate關聯關系映射
阿新 • • 發佈:2017-09-23
gen -m type foreign out eas ner 機制 路徑
一對一關聯
假設有兩個持久化類(實體類)User與Address,它們之間存在一對一的關系1,通過主鍵關聯(個人偏向另外一種)
User.hbm.xml文件配置<id name="userid" type="java.lang.Integer"> <column name="userid" /> <!-- 主鍵關聯,將主鍵生成策略改為foreign,表明由關聯類來生成主鍵, 即直接使用另外關聯類的主鍵值,該實體類不能生成主鍵 --> <generator class="foreign" /> <para name="property">address</para><!-- --> </id> <property name="name" type="java.lang.String"> <column name="name" length="12" /> </property> <property name="password" type="java.lang.String"> <column name="password" length="16" /> </property>
<one-to-one name="address" class="Address" constrained="true"></one-to-one></span>
Addrss.hbm.xml文件配置
<id name="addressid" type="java.lang.Integer"> <column name="addressid" /> <generator class="identity" /> </id> <property name="addressinfo" type="java.lang.String"> <column name="addressinfo" length="12" /> </property>
2通過外鍵關聯
兩張表主鍵不同,通過給一張表添加外鍵列來保持一對一關系,所以在user 表中加入address_id 直接在原始的User配置文件加入下行代碼<!-- class屬性:另外個實體類,將其的address屬性映射為address表的外鍵address_id, unique指定一對一映射 --> <many-to-one name="address" class="Address" unique="true"> <!-- 外鍵 --> <column name="address_id"></column> </many-to-one>
一對多關聯映射
還是上方例子為例,一個用戶擁有多個地址 第一步:在一的一方表示出多(即在用戶中表示多) 在User.java表示多,生成get,set方法private Set<Address> setAddress = new HashSet<Address>(); public Set<Address> getSetAddress() { return setAddress; } public void setSetAddress(Set<Address> setAddress) { this.setAddress = setAddress; }
第二步:在Address.java表示一
private User user; public User getUser() { return user; } public void setUser(User user) { this.user = user; }
第三步:配置Uesr.hbm.xml與Address.hbm.xml的基本映射 第四步:在一的配置文件(User.hbm.xml)配置多的一方
<!--set集合名稱 --> <!--hibernate機制,雙向維護外鍵 columen 外鍵名稱--> <key column="user_address"></key> <one-to-many class="Address全路徑"/> </set>
第五步:在多的配置文件(Address.hbm.xml)配置一的一方
<!--name屬性 寫address.java表示的user--> <many-to-one name="user" class="User全路徑" column="外鍵名"></many-to-one>
多對多的關聯映射
多對多一般創建第三張中間表來維護兩個表之間關系 場景:公司裏面一個用戶有多個角色,一個角色就多個用戶 第一步:創建實體類對象(user ,role) 第二步:在user.java表示role和在role.java表示user user.java表示roleprivate Set<Role> setRole = new HashSet<Role>(); public Set<Role> getSetRole() { return setRole; } public void setSetRole(Set<Role> setRole) { this.setRole = setRole; }
role.java表示user
private Set<User> setUser = new HashSet<User>(); public Set<User> getSetUser() { return setUser; } public void setSetUser(Set<User> setUser) { this.setUser = setUser; }
第三步:配置兩個類的基本映射 第四步:分別在配置文件中配置 user配置role
<!-- name 角色set集合名稱 table 第三張表的名稱 --> <set name="setRole" table="t_ub"> <!-- 配置當前映射文件在第三張表外鍵名稱 --> <key column="uid"></key> <many-to-many class="路徑" column="rid"></many-to-many> </set>
role配置user
<!-- name 角色set集合名稱 table 第三張表的名稱 --> <set name="setUser" table="t_ub"> <!-- 配置當前映射文件在第三張表外鍵名稱 --> <key column="bid"></key> <many-to-many class="路徑" column="uid"></many-to-many> </set>
由於t_user表與t_role沒有外鍵關聯,可以直接進行crud操作,兩表的關系通過第三張表來維護(後面會寫第三張表的維護)
Hibernate學習筆記(3)---hibernate關聯關系映射