一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - hibernate一對多關聯映射學習小結

hibernate一對多關聯映射學習小結

2020-12-31 15:42動力節點 Java教程

這篇文章主要介紹了hibernate一對多關聯映射學習小結,需要的朋友可以參考下

一對多關聯映射 

映射原理 

      一對多關聯映射和多對一關聯映射的映射原理是一致的,都是在多的一端加入一個外鍵,指向一的一端。關聯關系都是由多端維護,只是在寫映射時發生了變化。 

多對一和一對多的區別

  多對一和一對多的區別在于維護的關系不同:

(1)多對一:多端維護一端的關系,在加載多端時,可以將一端加載上來。

(2)一對多:一端維護多端的關系,在加載一端時,可以將多端加載上來。 

分類

一對多單向關聯映射 

對象模型      

hibernate一對多關聯映射學習小結    

      從對象模型中,我們可以看出,group持有user的一個引用。由于是單向關聯,所以數據在加載group時,會把user加載上來,但是user并不知道group的存在。

       我們先看一下group和user的實體,以及映射文件。

group

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package com.bjpowernode.hibernate;
import java.util.set;
public class group {
 private int id;
 private string name;
 private set users;
  
 public int getid() {
  return id;
 }
 public void setid(int id) {
  this.id = id;
 }
 public string getname() {
  return name;
 }
 public void setname(string name) {
  this.name = name;
 }
 public set getusers() {
  return users;
 }
 public void setusers(set users) {
  this.users = users;
 }
}

user

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package com.bjpowernode.hibernate;
public class user {
 private int id;
 private string name;
 public int getid() {
  return id;
 }
 public void setid(int id) {
  this.id = id;
 }
 public string getname() {
  return name;
 }
 public void setname(string name) {
  this.name = name;
 }
}

user.hbm.xml

?
1
2
3
4
5
6
7
8
9
10
11
12
<?xml version=1.0"?>
<!doctype hibernate-mapping public
 "-//hibernate/hibernate mapping dtd 3.0//en"
 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
 <class name="com.bjpowernode.hibernate.user" table="t_user">
  <id name="id">
   <generator class="native"/>
  </id>
  <property name="name"/>
 </class>
</hibernate-mapping>

group.hbm.xml

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?xml version="1.0"?>
<!doctype hibernate-mapping public
 "-//hibernate/hibernate mapping dtd 3.0//en"
 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
 <class name="com.bjpowernode.hibernate.group" table="t_group">
  <id name="id">
   <generator class="native"/>
  </id>
  <property name="name"/>
  <!-- users屬性,表達的是本對象與user的一對多的關系 -->
  <set name="users">
    <!--當前表(group)的主鍵-->
   <key column="groupid"/>
   <one-to-many class="com.bjpowernode.hibernate.user"/>
  </set>
 </class>
</hibernate-mapping>

生成的表結構和測試數據

hibernate一對多關聯映射學習小結hibernate一對多關聯映射學習小結

缺點 

1)因為多端user不知道group的存在(也就是user不維護與group的關系),所以在保存user時,關系字段groupid為null,如果該字段設置為非空,則將無法保存數據。

2)因為user不維護關系,而group維護關系,group就會發出多余的update語句,保證group和user有關系,這樣加載group時才把該users對應的用戶加載上來。 

一對多雙向關聯映射

對象模型       

hibernate一對多關聯映射學習小結  

        雙向關聯映射對比單向關聯映射,對象的加載方向由單向變成了雙向。 

我們看一下group和user的實體,映射文件

group

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package com.bjpowernode.hibernate;
import java.util.set;
public class group {
 private int id;
 private string name;
 private set users;
 
 public int getid() {
  return id;
 }
 public void setid(int id) {
  this.id = id;
 }
 public string getname() {
  return name;
 }
 public void setname(string name) {
  this.name = name;
 }
 public set getusers() {
  return users;
 }
 public void setusers(set users) {
  this.users = users;
 }
}

user

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package com.bjpowernode.hibernate;
public class user {
 private int id;
 private string name;
 private group groups;
 public int getid() {
  return id;
 }
 public void setid(int id) {
  this.id = id;
 }
 public string getname() {
  return name;
 }
 public void setname(string name) {
  this.name = name;
 }
 public group getgroups() {
  return groups;
 }
 public void setgroups(group groups) {
  this.groups = groups;
 }
}

group.hbm.xml

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?xml version="1.0"?>
<!doctype hibernate-mapping public
 "-//hibernate/hibernate mapping dtd 3.0//en"
 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.bjpowernode.hibernate">
 <class name="group" table="t_group">
  <id name="id">
   <generator class="native"/>
  </id>
  <property name="name"/>
  <!-- 影響控制反轉:inverse="false",多的一端維護關系,讓一的一端失效 -->
  <set name="users" inverse="true">
   <key column="groupid" not-null="true"/>
   <one-to-many class="user"/>
  </set>
 </class>
</hibernate-mapping>

user.hbm.xml

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?xml version="1.0"?>
<!doctype hibernate-mapping public
 "-//hibernate/hibernate mapping dtd 3.0//en"
 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.bjpowernode.hibernate">
 <class name="user" table="t_user">
  <id name="id">
   <generator class="native"/>
  </id>
  <property name="name"/>
  <!-- groups屬性,表達的是本對象與group的多對一的關系 -->
  <many-to-one name="groups" class="group" column="groupid"/>
 </class>
</hibernate-mapping>

生成的表和測試數據 

hibernate一對多關聯映射學習小結hibernate一對多關聯映射學習小結

一對多雙向關聯的映射方式:

 1)在一的一端的集合上采用<key>標簽,在多的一端加入一個外鍵

 2)在多的一端采用<many-to-one>標簽

注意:<key>標簽和<many-to-one>標簽加入的字段保持一直,否則會產生數據混亂。

inverse屬性:

         inverse屬性可以用在一對多和多對多雙向關聯上,inverse屬性默認為false,為false表示本端維護關系,如果inverse為true,則本端不能維護關系,會交給另一端維護關系,本端失效。所以一對多關聯映射我們通常在多的一端維護關系,讓一的一端失效,所以設置為inverse為true。

注意:inverse屬性,只影響數據的存儲,也就是持久化。 

目的 

       一對多雙向關聯映射的目的主要是為了解決一對多單向關聯的缺陷而不是需求驅動的。

總結

以上所述是小編給大家介紹的hibernate一對多關聯映射學習小結,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對服務器之家網站的支持!

原文鏈接:http://blog.sina.com.cn/s/blog_9c6852670102wvlu.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 高清毛片一区二区三区 | 成年人免费观看的视频 | 欧美va免费大片 | 久久91精品国产91久 | 亚洲精品乱码蜜桃久久久 | 18hdxxxx中国 | 国产区成人精品视频 | 精品视频入口 | 调教女帝 | 国产视频a区 | 99久久精品99999久久 | 天堂va在线高清一区 | 久久综合给合久久狠狠狠… | 嫩草在线观看视频 | 好大好爽好舒服视频 | 色就色综合 | 九九免费精品视频 | 欧美腐剧mm在线观看 | 女人用粗大自熨喷水在线视频 | 日本免费在线观看 | 四虎影视网址 | 成人永久免费福利视频网站 | 波多野结衣52部合集在线观看 | 精品无码人妻一区二区免费AV | 国产欧美日韩不卡一区二区三区 | 亚洲欧美另类在线观看 | 国产精品一区二区三区免费视频 | 99色在线播放 | 操操久久 | 厨房高h| 北海市副市长黄江老公 | 欧美一区二区三区久久久 | 免费叼嘿视频 | 操熟美女又肥又嫩的骚屁股 | 王雨纯 羞羞 | 国产在线成人a | 国产99re在线观看69热 | 无人区在线观看免费完整版免费 | 男人操女人动图 | 美日韩一区二区三区 | 日韩欧美视频二区 |