NHibernate初探(六) 一對多關係級聯操作

2022-02-11 09:08:28 字數 3879 閱讀 9104

一對多關係通過外來鍵關係連線兩個表,而沒有中間的表。

首先先引用一段對集合的釋義:

bag:物件集合,每個元素可以重複。例如

,在.net

中相當於

ilist

或者ilist

實現。set

:物件集合,每個元素必須唯一。例如

,在.net

中相當於

iset

或者iset

實現,iesi.collections.dll

程式集提供

iset

集合。list

:整數索引物件集合,每個元素可以重複。例如

,,},在

.net

中相當於

arrarylist

或者list

實現。map

:鍵值對集合。例如

,,},在

.net

中相當於

hashtable

或者idictionary

實現。持久類:

(一)customer

public

class

customer

public

virtual

fllname name

public

virtual

datetime createtime

public

virtual

string address

public

virtual

int version

private

ilist

_list = new

list

();public

virtual

ilist

phones

set }

}public

class

fllname

public

string lastname

public

string names }

}這個類我要用於

component

,和一對多關係應用,所以多了個

fullname

復合屬性。

(二)call

public

class

call

public

virtual

string phone

public

virtual

customer customer

}這個類就是

onetomany

中的many

一方(三)

<

bagname

="phones"

table

="calls"

cascade

="all"

inverse

="true">

<

keycolumn

="customerid">

key>

<

one-to-many

class

="domain.entities.call,domain"/>

bag>

(四)<

many-to-one

name

="customer"

column

="customerid"

class

="domain.entities.customer,domain"

not-null

="true"/>

說明一下:

·對於資料庫表之間的關聯關係,

nhibernate

也是過來了(自己理解),所以不必在資料庫中為資料表人為的建立關係,如果那樣的話,

nhibernate

中就不必建立一對多關係了(這個我還沒有測試)。

·對於一對多關係中的兩方:一的一方帶乙個集合屬性,而這個集合是多的那一方的集合;而多的一方帶有乙個一方的型別的屬性,可以這樣描述:乙個父親帶有一群孩子,而乙個孩子心中(現實也是)也有乙個父親。而對於物件的

nhb,資料庫中的外來鍵由物件來描述。

其實在這裡,關係已經建立起來了,要做的就是進行

curd

了。(一)

查詢[test]

public

void testgetone()

}其中的

getelementbyid

方法就是查詢乙個

customer

持久資料而已,但因為關係的建立,使得它的

phones

屬性得以填充。檢視它的

sql語句為:

select

customer0_

.unid

asunid0_0_

,customer0_

.version

asversion0_0_

,customer0_

.firstname

asfirstname0_0_

,customer0_

.lastname

aslastname0_0_

,customer0_

.createtime

ascreatetime0_0_

,customer0_

.address

asaddress0_0_

from

customer

customer0_

where

customer0_

.unid

=@p0

;@p0

= 38

select

phones0_

.customerid

ascustomerid1_

,phones0_

.unid

asunid1_

,phones0_

.unid

asunid1_0_

,phones0_

.phone

asphone1_0_

,phones0_

.customerid

ascustomerid1_0_

from

calls

phones0_

where

phones0_

.customerid

=@p0

;@p0

= 38

分別查詢兩個表中的資料

(二)新增

public

void testadd()

,address = "

清河縣1"

};call phones = new

call ;

call phones1 = new

call ;

phones.customer = c;

phones1.customer = c;

trycatch

hh.addupdatedelete(domain.enums.eoperation.add, c);

}這裡的

customer

的phones

是乙個call

的集合。

(三)刪除

public

void testdelete()

;hh.addupdatedelete(domain.enums.eoperation.delete, c);

}直接刪除就行了。

(四)更新

public

void testupdate()

Mybatis學習系列六 一對一 一對多延遲載入

通過日誌資訊 詳細的閱讀mybatis執 況 觀察mybatis實際執行的sql語句 以及sql中的引數和返回結果 日誌 log4j 1 log4j.jar包 2 開啟日誌 在conf.xml 3 編寫配置日誌輸出檔案 在src中建立file log4j.properties log4j.rootl...

NHibernate一對多對映儲存資料

iset集合中,每個物件唯一。在nhibernate中,在父類中對應子類的iset集合時,因為set類為抽象類,所以不能例項化set類。isetlist new set 將報 無法建立抽象類或介面 iesi.collections.generic.set 的例項 錯誤。hashedset繼承於dic...

Nhibernate中一對多對映 雙向關聯

雙向關聯和單向關聯的區別是 兩邊都能維護關係,如我查詢兩邊的任何一邊,另外一邊的資訊也能查詢出來,其他的修改刪除只要設定了,也都可以。體現在 中是 因為上篇單向關聯是在dictionaryentity上,所以變為雙向關聯要在dictiontypeentity和他對應的xml檔案中加上關聯對映。dic...