对Hibernate的cascade解释

开发 后端
本文对Hibernate中设置cascade="all"所引出的一系列问题做出分析给出相关解决办法。

Hibernate中onetomany hibernate设置cascade="all"的话,那么在进行联机操作的时候,如果把一端设置成inverse="false",比如one的一方,那么many一方的与one一方失去关联关系的数据不会被删除掉,而是将关联外键设置为null,出现了孤立的数据!解决办法就是设置 cascade="all-delete-orphan"。然而这种简单的设置,会出现问题。

org.springframework.orm.hibernate3.HibernateSystemException: A collection with cascade="all-delete-orphan" was no longer referenced by the owning entity instance: xxx.Aaa.bbbList; nested exception is org.hibernate.HibernateException: A collection with cascade="all-delete-orphan" was no longer referenced by the owning entity instance: xxx.Aaa.bbbList
Caused by: org.hibernate.HibernateException: A collection with cascade="all-delete-orphan" was no longer referenced by the owning entity instance: xxx.Aaa.bbbList

参考了论坛中的一些关于Hibernae中cascade的帖子,知道如下办法可以解决:

1 在实体中把setBbbList方法设置成私有private

2 在实体中增加如下方法:

public void addBbbList(Bbb b) {
       getBbbList().add(b);
       b.setAaa(this);
}
3 设置cascade="all-delete-orphan"
4 在dao中
DAO dao= (DAO) BeanFactory.getBean("dao");
Aaa a = dao.getAaaById(id);
a.getBbbList().clear();

a.addBbbList(b1);
a.addBbbList(b2);
a.addBbbList(b3);
dao.update(a);

这样与a关联的b1 b2 b3会同步到数据库,之前与a关联的子表数据将会被自动删除。

【编辑推荐】

  1. Hibernate中cascade和inverse的相关
  2. 关于Hibernate你必须知道的六个方面
  3. 解析Hibernate的批量删除功能
  4. Struts与Hibernate的完美结合方案
  5. Hibernate的性能优化
责任编辑:张攀 来源: 网易博客
相关推荐

2009-06-12 14:52:21

cascadeinverseHibernate

2009-09-22 09:40:03

cascade和invHibernate

2011-04-07 11:06:18

Hibernate

2009-09-23 08:56:18

Hibernate cHibernate i

2012-02-03 10:21:47

HibernateJava

2009-06-18 14:51:12

Hibernate缓存Hibernate

2009-06-16 14:36:54

Hibernate继承

2009-09-24 12:50:23

Hibernate F

2009-09-22 13:35:04

Hibernate A

2010-04-30 16:58:14

Oracle Raw

2012-02-06 13:34:49

HibernateJava

2009-06-04 10:34:19

Hibernate一对一对多关系配置

2009-09-22 09:55:58

Hibernate实例

2009-06-18 14:22:06

Hibernate多对Hibernate

2009-06-12 15:25:38

Hibernate s

2010-04-15 09:09:02

Hibernate

2009-06-03 16:27:27

Hibernate一对一关系

2009-12-10 15:44:18

Build Web S

2009-12-07 18:26:36

WCF客户端

2010-05-27 15:25:14

Linux查看内存
点赞
收藏

51CTO技术栈公众号