cascade="alldeleteorphan"时容易出现的一个异常

// 酒店: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); 

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

至于出现该异常的原因,以及解决的原理,还不明白。

原文地址:https://www.cnblogs.com/chaohi/p/2330425.html