父子关系的修改与删除详解

*下面要谈的delete的时候父子关系(这里谈论cacade设置中包含delete的情况)

*cacade 设置的情况下,以下说明成立

remove例一:


ITxMgr tx = null;
tx = HibernateTxMgr.beginTrans("Delete a relationships...");
session = (Session) tx.getSession();
parent.getChildren().remove(0);
session.flush();
tx.endTrans();

remove例二: *无论是否设置inverse="true"都不会将孩子从父亲中删除!parent.getChildren().remove(0); 这么写毫无作用! ITxMgr tx = null;
tx = HibernateTxMgr.beginTrans("Delete a relationships...");
session = (Session) tx.getSession();
List ChildList = parent.getChildren();
ChildPO child= (ChildPO)ChildList.get(0);
child.setParent(null);
session.update (parent);
session.flush();
tx.endTrans();

*无论是否设置inverse="true"都会将孩子从父亲中删除!所以注意要改变父子关系最好还是由孩子一方来改变,儿子删除了不会影响父亲!
remove例三:

ITxMgr tx = null;
tx = HibernateTxMgr.beginTrans("Delete a relationships...");
session = (Session) tx.getSession();
session.delete (parent);
session.flush();
tx.endTrans();

*父亲删除了所有的儿子也被删除
*下面再来谈一下修改

ITxMgr tx = null;
tx = HibernateTxMgr.beginTrans("Delete a relationships...");
session = (Session) tx.getSession();
List ChildList = parent.getChildren();
ChildPO child= (ChildPO)ChildList.get(0);
child.setName("null");
session.update (parent);
session.flush();
tx.endTrans();

*虽然只保存了父亲但是儿子的变化也被保存了 而且只生成了一条sql Hibernate: update CHILD set PARENTID=?, NAME=? where ID=?

other:

这个帖子不错,希望楼主继续补充。

谈谈我对update的用法:
通过级连来实现对子类对象的添加和更新的方法如楼主所说:
//添加
parent.add(child);
sess.upate(parent);
...
//更新
child.setXXX(xxx);
sess.upate(parent);
这样是可行的,但是如果配置文件写的不太好的话,有可能导致多余的sql产生。
为了防微杜渐,我习惯还是增加什么改变什么,我就直接对它操作。
如下:
//添加:
child.setParent(parent);
sess.save(child);
...
//更新
child.setXXX(xxx);//当然是个持久对象
sess.commit();
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值