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