您的位置:首页 > 其它

cascade="all-delete-orphan"时容易出现的一个异常

2009-06-02 16:32 591 查看
// 酒店:hotel 标志物:building

// 这二者之间是一对多的关系,一个酒店对应多个标志物。

// 酒店的配置文件中设置了对标志物的 cascade="all-delete-orphan"

执行如下代码:

TbHotelDAO hotelDAO =new TbHotelDAO();
TbHotel hotel = hotelDAO.findById(44);
hotel.setHotelName("12345");

TbBuilding building2 = new TbBuilding();
building2.setTbHotel(hotel);
building2.setDistance("234米");
building2.setBuildingName("阿斯顿");

Set tbBuildings = new HashSet();
tbBuildings.add(building2);
hotel.setTbBuildings(tbBuildings);

hotelDAO.update(hotel);

报出如下异常:

A collection with cascade="all-delete-orphan" was no longer referenced by the owning entity instance:。。。。。。。。。。。

解决办法:

将代码

Set tbBuildings = new HashSet();
tbBuildings.add(building2);
hotel.setTbBuildings(tbBuildings);

修改为:

Set tbBuildings = hotel.getTbBuildings();
tbBuildings.clear();
tbBuildings.add(building2);

我这样试验了下,是可以的,不出现异常了。

至于出现该异常的原因,以及解决的原理,还不明白。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐