hibernate 级联删除问题

yellow0323 2009-08-26 10:06:23
有表capture_game与capture_time 一对多关联关系

父类CaptureGame
private Set TimeSets = new HashSet(0) ;			//策略详细


子类CaptureTime

private CaptureGame captureGame;		//策略编号


game.hbm.xml配置:

<set name="TimeSets" inverse="true" cascade="all-delete-orphan" lazy="false">
<key>
<column name="capture_id" length="32" not-null="true"/>
</key>
<one-to-many class="com.ysh.sellSys.CaptureTime.valueobject.CaptureTime"/>
</set>

time.hbm.xml 配置:

<many-to-one name="captureGame" fetch="select" class="com.ysh.sellSys.captureGame.valueobject.CaptureGame">
<column name="capture_id" length="32" not-null="true"/>
</many-to-one>

为什么执行级联删除时老报错:

2009-08-26 09:57:49,546 ERROR SysExceptionHandler:138 [http-8080-Processor20] - deleted object would be re-saved by cascade (remove deleted object from associations): [com.ysh.sellSys.CaptureTime.valueobject.CaptureTime#40288182234fecae012350320d410006]; nested exception is org.hibernate.ObjectDeletedException: deleted object would be re-saved by cascade (remove deleted object from associations): [com.ysh.sellSys.CaptureTime.valueobject.CaptureTime#40288182234fecae012350320d410006]
org.springframework.orm.hibernate3.HibernateObjectRetrievalFailureException: deleted object would be re-saved by cascade (remove deleted object from associations): [com.ysh.sellSys.CaptureTime.valueobject.CaptureTime#40288182234fecae012350320d410006]; nested exception is org.hibernate.ObjectDeletedException: deleted object would be re-saved by cascade (remove deleted object from associations): [com.ysh.sellSys.CaptureTime.valueobject.CaptureTime#40288182234fecae012350320d410006]
org.hibernate.ObjectDeletedException: deleted object would be re-saved by cascade (remove deleted object from associations): [com.ysh.sellSys.CaptureTime.valueobject.CaptureTime#40288182234fecae012350320d410006]
...全文
159 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
legu1 2009-08-26
  • 打赏
  • 举报
回复
删除的时候先要删子表,然后再删主表
Trinx 2009-08-26
  • 打赏
  • 举报
回复
楼主你把game.hbm.xml改下:
<set name="TimeSets" inverse="true" cascade="all-delete-orphan" lazy="false">
<key>
<column name="capture_id" length="32" not-null="true"/>
</key>
<one-to-many class="com.ysh.sellSys.CaptureTime.valueobject.CaptureTime" cascade="delete"/>
</set>
zhouzongjiu 2009-08-26
  • 打赏
  • 举报
回复
http://www.blogjava.net/crazycy/archive/2006/06/24/54939.html
woming66 2009-08-26
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 yellow0323 的回复:]
引用 2 楼 woming66 的回复:
为什么要级联删除啊?
直接用程序+事务控制多好啊,一的一端inverse="true",关系维护端已经在多的一端!
建议你还是用程序写,就是多写一条hql语句

一对多关系 关系维护端一般都是在多的一端! 我该成inverse="false" 也报同样的错
感觉hibernate的关联是不怎么好用

[/Quote]

inverse="true"是不能动的,如果你改成false了才是错的,一对多关联都把关系维护端放在多的一端,如果放一德一端会出现很多问题。
建议你不要级联操作,用程序去代替级联操作!
yellow0323 2009-08-26
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 woming66 的回复:]
为什么要级联删除啊?
直接用程序+事务控制多好啊,一的一端inverse="true",关系维护端已经在多的一端!
建议你还是用程序写,就是多写一条hql语句
[/Quote]
一对多关系 关系维护端一般都是在多的一端! 我该成inverse="false" 也报同样的错
感觉hibernate的关联是不怎么好用
woming66 2009-08-26
  • 打赏
  • 举报
回复
为什么要级联删除啊?
直接用程序+事务控制多好啊,一的一端inverse="true",关系维护端已经在多的一端!
建议你还是用程序写,就是多写一条hql语句
yellow0323 2009-08-26
  • 打赏
  • 举报
回复
哎 怎么没人回答啊 自己顶下
yellow0323 2009-08-26
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 zhouzongjiu 的回复:]
http://www.blogjava.net/crazycy/archive/2006/06/24/54939.html
[/Quote]
他的几个方法我都试过了 还是没用
yellow0323 2009-08-26
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 legu1 的回复:]
删除的时候先要删子表,然后再删主表
[/Quote]
就是这么删的啊
yellow0323 2009-08-26
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 mawentao728 的回复:]
楼主你把game.hbm.xml改下:
<set name="TimeSets" inverse="true" cascade="all-delete-orphan" lazy="false">
            <key>
                <column name="capture_id" length="32" not-null="true"/>
            </key>
            <one-to-many class="com.ysh.sellSys.CaptureTime.valueobject.CaptureTime" cascade="delete"/>
        </set>

[/Quote]
不能这样配的

67,512

社区成员

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

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