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);
我这样试验了下,是可以的,不出现异常了。
至于出现该异常的原因,以及解决的原理,还不明白。
// 这二者之间是一对多的关系,一个酒店对应多个标志物。
// 酒店的配置文件中设置了对标志物的 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);
我这样试验了下,是可以的,不出现异常了。
至于出现该异常的原因,以及解决的原理,还不明白。
相关文章推荐
- cascade="all-delete-orphan"时容易出现的一个异常
- HIbernate级联删除(hibernate 双向一对多中 主表设置cascade="all-delete-orphan",在save时出现
- org.hibernate.HibernateException: A collection with cascade="all-delete-orphan" was no longer referenced by the owning entity instance:
- Don't dereference a collection with cascade="all-delete-orphan" ,这是14年遇到的问题,最近在博客上进行整理汇总
- cascade="all-delete-orphan" 处理
- 晕,hibernate 的 merge和cascade="all-delete-orphan"要慎重合在一起使用
- org.hibernate.HibernateException: A collection with cascade="all-delete-orphan" was no longer referenced by the owning entity instance:
- Hibernate逍遥游记-第5章映射一对多-02双向(<set>、<key>、<one-to-many>、inverse、cascade="all-delete-orphan")
- hibernate cascade="all-delete-orphan"(所有-删除-孤儿)释疑
- 晕,hibernate 的 merge和cascade="all-delete-orphan"要慎重合在一起使用
- HibernateException - A collection with cascade="all-delete-orphan" was no longer referenced by the o
- cascade="all-delete-orphan" 处理
- Hibernate5-1对多(1:n)-级联删除-cascade="delete-orphanl"
- Hibernate中cascade为all-delete-orphan与all的区别
- .NET入门(四)一个项目,只能有一个类有Main,否则出现"定义了不止一个入口点"的异常
- 实践证明:当类想实现两个监听接口的时候,必须把两个都设置成内部类,不可能一个是外部类实现,一个是内部类实现。这样容易捕获错误,出现异常。
- 【Android笔记-异常-4】定义一个临时的数组变量承接数据,ListView的数据以及通知数据更新要放到同一个线程(主线程)。避免出现异常"The content of the adapter
- hibernate cascade属性 all-delete-orphan
- 对异常处理中的一个问题的思考(出现异常,程序仍能继续运行)
- 使用Retrofit时出现 java.lang.IllegalArgumentException: URL query string "t={type}&p={page}&size={count}" must not have replace block. For dynamic query parameters use @Query.异常原因