有以下三個(gè)對(duì)象:
US設(shè)備對(duì)象:USDevie
US設(shè)備類(lèi)型對(duì)象:USDeviceModle
US設(shè)備端口對(duì)象:USDevicePort
class USDevice
{
....
// US設(shè)備類(lèi)型
USDeviceModel model;
// US設(shè)備端口對(duì)象集合
Set<USDevicePort> devicePortSet = new HashSet();
}
/**
US設(shè)備類(lèi)型說(shuō)明每種設(shè)備都有不同的端口數(shù)目
*/
class USDeviceModel
{
....
// 設(shè)備端口數(shù)目
int deviceport;
}
class USDevicePort
{
private int deviceId;
private int devicePort;
}
1 : 1 : n
一種US設(shè)備(device)----->設(shè)備類(lèi)型(model)------>不同數(shù)目的設(shè)備端口
US設(shè)備:設(shè)備類(lèi)型:設(shè)備端口數(shù)目 = 1:1:n
所以,如果新增設(shè)備的時(shí)候,要根據(jù)設(shè)備類(lèi)型,得到相應(yīng)的設(shè)備端口數(shù)目,
然后在USDevicePort對(duì)應(yīng)的數(shù)據(jù)庫(kù)表中插入記錄.
編輯設(shè)備的時(shí)候,如果編輯了US設(shè)備類(lèi)型,則相應(yīng)的設(shè)備端口就會(huì)改變,這種
情況除了更新USDevice對(duì)應(yīng)的數(shù)據(jù)表中設(shè)備類(lèi)型外,因?yàn)樵赨SDevicePort表中
存放在以前設(shè)備類(lèi)型的端口記錄,所以應(yīng)該先刪除之前的端口記錄,然后再插入
現(xiàn)在類(lèi)型所對(duì)應(yīng)的端口記錄.
其實(shí)只需:
//這一步根據(jù)具體設(shè)備id,從數(shù)據(jù)庫(kù)中取出相應(yīng)的設(shè)備對(duì)象
USDevice device = .....
// 得到US設(shè)備端口對(duì)象集合
Set devicePortSet = device.getDevicePortSet();
// 先清空以前所有的端口記錄
devicePortSet.clear();
// 根據(jù)編輯后類(lèi)型ID,得到設(shè)備類(lèi)型對(duì)象,并可以得到此種類(lèi)型上的端口數(shù)目
USDeviceModel usModle = ....
// 根據(jù)上面得到的端口數(shù)據(jù),構(gòu)造"設(shè)備端口數(shù)目"對(duì)象,并把所有的設(shè)備端口對(duì)象添加到集合中
//最后更新US設(shè)備
這樣,每當(dāng)編輯一個(gè)US設(shè)備的類(lèi)型后,在設(shè)備端口表中,這種設(shè)備編輯之前的類(lèi)型所對(duì)應(yīng)的端口記錄
就會(huì)被刪除,而保持只有新的設(shè)備類(lèi)型端口記錄.
注意在配置USDevice.hbm.xml文件時(shí),要將<set name="devicePortSet " casecade="all-orphan-delete" .../>
因?yàn)樗鼤?huì)將和USDevice沒(méi)有關(guān)聯(lián)的對(duì)象從數(shù)據(jù)中刪除,這也與程序中devicePortSet.clear()相對(duì)應(yīng).