hibernate映射文件中cascade="delete"不好使,怎么办

[复制链接]
查看11 | 回复4 | 2016-8-10 11:52:34 | 显示全部楼层 |阅读模式
UserStatus.hbm.xml:








UserVO.hbm.xml:






执行session.delete(status);
控制台显示:
Hibernate: select web...
Hibernate: delete from UserStatus where id=?
Hibernate: select web...
去掉cascade="delete",控制台上依旧显示
Hibernate: select web...
Hibernate: delete from UserStatus where id=?
Hibernate: select web...
就是说cascade=all,svae-update,delete任何属性,hibernate2都没反应.从前我也遇到过一次这种情况,莫明其妙自己好使了,弄得我自己现在还胡里胡涂的:http://zhidao.baidu.com/question/43906372.html
Hibernate建表时生成的sql里面关联关系:
alter table Users add index FK4E39DE8CACDCA8F (statId), add constraint FK4E39DE8CACDCA8F foreign key (statId) references UserStatus (id)
我现在想知道怎么解决这个问题,这样我不敢轻易删除父表中的记录,怕子表中包含的级联找不到就跑异常!
另外一个问题也一起问了吧:
如果子表中的某记录的父记录已经被删除,如果找到子表中这些已经废弃的记录?
改成false后,控制面板显示:
Hibernate: select web...
Hibernate: update Users set statId=null where statId=?
Hibernate: delete from UserStatus where id=?
Hibernate: select web...
依旧没有delete掉User

回复

使用道具 举报

千问 | 2016-8-10 11:52:34 | 显示全部楼层
楼上说的很对楼主你用session.delete(某个user就知道了);_____________________________________________哦不好意思,看错了楼主表了,userStatucs是parent,那就应该做主控方,inverse也不用改的true是对的,你的问题很奇怪啊,应该删的掉的,楼主有没有试验过呢,你把主表删了,子表里数据还在吗,有时候删除是批量删除的(一开始存在缓冲里,到达一定量才一起删除的,楼主你不要看控制台,以数据库为准)如果还不行lazy改为false试试,
回复

使用道具 举报

千问 | 2016-8-10 11:52:34 | 显示全部楼层
另外一个问题也一起问了吧: 如果子表中的某记录的父记录已经被删除,如果找到子表中这些已经废弃的记录?这个问题...如果级联的话...父记录删除了..子记录也不复存在了..
回复

使用道具 举报

千问 | 2016-8-10 11:52:34 | 显示全部楼层
inverse="true",表示关系由对方表维护,也就是UserVO来维护的。你delete或者updateUserVO的时候,会级联到UserStatus。删除自己,当然不会删除UserVO,除非你把inverse="false",由自己维护。第二个问题,如果删除了肯定就找不到记录了,也就出现了丢失数据的情况。一般情况下,我会有一个状态字段,表示记录
回复

使用道具 举报

千问 | 2016-8-10 11:52:34 | 显示全部楼层
cascade="all"Transaction tx = session.beginTransaction(); ...tx.commit();还有顺便问一下:你的UserVO.hbm.xml将vstatId设为主键了么?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行