hibernate 级联删除的问题

trisen 2008-12-08 11:42:38
我现在有三表A,B,C
B表是中间表,A和C表分别对B进行1对多的映射
配置文件如下(拿关键的)
在A和C的映射文件都存在这样一段
<set name="sysRelRoleReses" inverse="true" lazy="false" cascade="all-delete-orphan">
<key>
<column name="SYS_RES_ROW_ID" precision="22" scale="0" not-null="true" />
</key>
<one-to-many class="com.zjhcsoft.biap.role.entity.SysRelRoleRes" />
</set>

在B映射文件有这样一段
<many-to-one name="sysRole" class="com.zjhcsoft.biap.role.entity.A" fetch="select" lazy="false">
<column name="SYS_ROLE_ROW_ID" precision="22" scale="0" not-null="true" />
</many-to-one>
<many-to-one name="sysResourceBySysRowId" class="com.zjhcsoft.biap.resource.entity.C" fetch="select" lazy="false">
<column name="SYS_ROW_ID" precision="22" scale="0" not-null="true" />
</many-to-one>

我现在在对A或者C进行删除操作
方法如下
ADao.deleteByKey(A.ID);
或者使用先remove再delete的方法实现都会提示
deleted object would be re-saved by cascade异常

我想了半天没想出原因,最后发现是两边都对中间表进行一对多关联的时候才有这个问题,我把一边的映射文件中的SET注释掉后,就可以正常删除了,但是这样就对我造成困扰了,我两边都需要这样做,请问该怎么去处理~
...全文
320 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
wuqianyu1 2009-04-25
  • 打赏
  • 举报
回复
我觉得是因为在删除A时,已经级连删除了B,再删除C时,B已经不存在了,就会报异常,可以在B中也加级连,只删除A或C就可达到同时删除了
伯虎点蚊香 2009-04-25
  • 打赏
  • 举报
回复
inverse=“true”和你后面调用的方法矛盾
wumang 2009-04-05
  • 打赏
  • 举报
回复
你在A <set name="sysRelRoleReses" inverse="true"...的一方设置inverse="true"表示将控制权叫给多的一方(b),而你调用的又是ADao.deleteByKey(A.ID); 似乎不妥吧!因为你的控制权已经叫给b了啊,所以会出错。你可以试一试先得到a = session.load(a.class,id),再通过a.getB()得到B,
再通过B.remove(a),来实现!
qinlu7662032 2008-12-21
  • 打赏
  • 举报
回复
是不是inverse属性的问题? inverse为true 就是将控制权交给多表 这样就不能级联删除了 改成false试试 一表控制多表的级联操作
benpao8 2008-12-21
  • 打赏
  • 举报
回复
你可以不用将many-to-many类型转换为两个on-to-many类型,直接将两张表关联起来,只要加一张关联表就行了,那样更好操作。
benpao8 2008-12-21
  • 打赏
  • 举报
回复
这个问题可以解决的,之前我做双向many-to-many时曾遇到过这样的问题。
hibernate现在完全支持从一方删除数据,不过我们要设置如下属性:inverse="false" 将主主控权给一方,
casecade = all. 支持级联,能连续delete
要不你试下
qunimagebi 2008-12-20
  • 打赏
  • 举报
回复
看看书
gongyali2005 2008-12-19
  • 打赏
  • 举报
回复
可以在数据库里写个外键约束。
乡长 2008-12-08
  • 打赏
  • 举报
回复
hibernate现在好像还不支持一对多删除
lizhijun911 2008-12-08
  • 打赏
  • 举报
回复
应该是有外键的关系吧,级联删除要先删除最底级表,接着删除上一级的表的内容。

67,538

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧