*下面要谈的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();
*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();