cascade="all-delete-orphan"时容易出现的一个异常
// 酒店: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);
我这样试验了下,是可以的,不出现异常了。
至于出现该异常的原因,以及解决的原理,还不明白。