有以下三个对象:
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()相对应.