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); 

 

 

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

 

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

 

 

 

 

 

posted on 2009-06-02 16:32  台哥编程课堂  阅读(2696)  评论(0编辑  收藏  举报

导航