一對多關係通過外來鍵關係連線兩個表,而沒有中間的表。
首先先引用一段對集合的釋義:
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...