激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

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

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 19禁国产精品福利视频 | 香蕉视频99 | 少妇一级淫片高潮流水电影 | 国产伦精品一区二区三区 | 成人羞羞视频在线观看免费 | 午夜看毛片 | www日韩在线观看 | 欧美成人精品一区二区男人小说 | 久久人人爽人人爽人人片av高请 | 黄色网络免费看 | 久草免费资源视频 | 在线播放91 | 国产一级一级片 | 亚洲乱搞 | 99爱视频在线观看 | 日日摸夜夜添夜夜添牛牛 | 午夜a狂野欧美一区二区 | 精品xxxx户外露出视频 | 中文字幕在线观看视频一区 | 欧美成人黄色片 | 国产精品视频专区 | 国产一区二区视频网站 | 91短视频在线播放 | h色网站在线观看 | 久久精品欧美一区 | 黄色网址在线免费播放 | 日韩欧美视频一区二区三区 | 日韩黄色一级视频 | xxxxhdhdhdhd日本 | 日韩区在线 | 一本一本久久a久久精品综合小说 | 少妇色诱麻豆色哟哟 | 一级做受毛片免费大片 | 欧美爱爱视频网站 | 日本黄色大片免费 | 1000部精品久久久久久久久 | 小雪奶水翁胀公吸小说最新章节 | 日韩精品中文字幕一区二区三区 | 国产精品一区2区3区 | 欧美性生活视频免费看 | 一区二区三区日 |