hibernate一對多關聯對映

2022-08-20 09:03:14 字數 3168 閱讀 4689

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

多對一和一對多的區別在於維護的關係不同:

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

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

從物件模型中,我們可以看出,group持有user的乙個引用。由於是單向關聯,所以資料在載入group時,會把user載入上來,但是user並不知道group的存在。

我們先看一下group和user的實體,以及對映檔案。

group

public class group

user

public class user

group.hbm.xml

<?

xml version="1.0"

?>

>

<

>

<

class

name

="com.liang.hibernate.group"

table

="t_group"

>

<

id name

="id"

>

<

generator

class

="native"

/>

id>

<

property

name

="name"

/>

<

set

name

="users"

>

<

key

column

="groupid"

/>

<

one-to-many

class

="com.liang.hibernate.user"

/>

set>

class

>

>

缺點:

1)因為多端user不知道group的存在(也就是user不維護與group的關係),所以在儲存user時,關係欄位groupid為null,如果該欄位設定為非空,則將無法儲存資料。

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

二、一對多雙向關聯對映

雙向關聯對映對比單向關聯對映,物件的載入方向由單向變成了雙向。

我們看一下group和user的實體,對映檔案

group

public class group

user

public class user

group.hbm.xml

<?

xml version="1.0"

?>

>

<

package

="com.liang.hibernate"

>

<

class

name

="group"

table

="t_group"

>

<

id name

="id"

>

<

generator

class

="native"

/>

id>

<

property

name

="name"

/>

<

set

name

="users"

inverse

="true"

>

<

key

column

="groupid"

not-null

="true"

/>

<

one-to-many

class

="user"

/>

set>

class

>

>

user.hbm.xml

<?

xml version="1.0"

?>

>

<

package

="com.liang.hibernate"

>

<

class

name

="user"

table

="t_user"

>

<

id name

="id"

>

<

generator

class

="native"

/>

id>

<

property

name

="name"

/>

<

many-to-one

name

="groups"

class

="group"

column

="groupid"

/>

class

>

>

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

1)在一的一端的集合上採用標籤,在多的一端加入乙個外來鍵

2)在多的一端採用標籤

注意:標籤和標籤加入的字段保持一直,否則會產生資料混亂。

inverse屬性:

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

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

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

Android ormlite 一對多關聯對映筆記

上次看到有人說道android query框架 查了一下資料 真是好用阿。然後又看到推薦了解ormlite 今天又去看了下ormlite 第乙個當然是實驗關聯映 然後發現它的一對多實現好像跟hibernate的使用不太一樣 記錄下來。等下再看看多對多怎麼實現的。先建立public class cus...

hibernate 一對多關聯

雖然老師說不提倡使用一對多的對映,一般情況下推薦使用多對一設定實現,他們的效果是一樣的,但是我們還是簡單的講了一點實現方法,以後估計很少用吧,記到這吧,說不定不用很快就想不起來了 現在定義了兩個bean,乙個是hospital,另外乙個叫做doctor.在hospital中的屬性為 private ...

Spring Data JPA的一對多關聯對映

2.spring data jpa一對多的相關操作 客戶表的建表語句 create table cst customer cust id bigint 32 not null auto increment comment 客戶編號 主鍵 cust name varchar 32 not null c...