Hibernate---inverse,cascade(3)
2011-09-05 23:21
190 查看
更新分支机构:
1、设置inverse=true cascade=none,更新代码如下:
session = HibernateSessionFactory.currentSession();
tx = session.beginTransaction();
BranchInfo branchInfo = (BranchInfo) session.load(BranchInfo.class, Long.valueOf(6));
branchInfo.setAddress("bj5");
Set<Seal> sealSet = new HashSet<Seal>();
Seal seal = new Seal();
seal.setSealData(null);
seal.setSealModels(null);
seal.setSealName("sealName7");
sealSet.add(seal);
branchInfo.setSealSet(sealSet);
session.save(branchInfo);
System.out.println("success_____________");
tx.commit();
发出如下sql语句:
Hibernate: update tbranchinfo set address=? where id=?
说明:
虽然重新设置了branchinfo关联的seal集合,但由于cascade=none,没有级联保存,
由于inverse=true,因此没有更新级联关系。
2、设置inverse=true cascade=save-update,测试代码不变,发出sql语句如下:
Hibernate: select max(id) from tseal
Hibernate: insert into tseal (sealName, id) values (?, ?)
Hibernate: update tbranchinfo set address=? where id=?
说明:
更新了branchinfo的address属性,由于设置cascade=save-update,
因此级联保存tseal表,由于inverse=true所以并没有维护关系
3、设置inverse=false cascade=none,发出sql语句如下:
Hibernate: update tseal set branchInfoId=null where branchInfoId=?
Hibernate: update tseal set branchInfoId=? where id=?
说明:
将原先的seal对象和branchInfo解除管理关系,并且更新新的seal和branch关联关系,但是由于
cascade=none所以没有将新seal插入表中因此在更新级联关系时报如下异常:
org.hibernate.TransientObjectException: object references an unsaved transient instance
4、设置inverse=false cascade=save-update发出sql语句如下:
Hibernate: select max(id) from tseal
Hibernate: insert into tseal (sealName, id) values (?, ?)
Hibernate: update tseal set branchInfoId=null where branchInfoId=?
Hibernate: update tseal set branchInfoId=? where id=?
将原先的seal对象和branchInfo解除关联关系,并且更新新的seal和branch关联关系
1、设置inverse=true cascade=none,更新代码如下:
session = HibernateSessionFactory.currentSession();
tx = session.beginTransaction();
BranchInfo branchInfo = (BranchInfo) session.load(BranchInfo.class, Long.valueOf(6));
branchInfo.setAddress("bj5");
Set<Seal> sealSet = new HashSet<Seal>();
Seal seal = new Seal();
seal.setSealData(null);
seal.setSealModels(null);
seal.setSealName("sealName7");
sealSet.add(seal);
branchInfo.setSealSet(sealSet);
session.save(branchInfo);
System.out.println("success_____________");
tx.commit();
发出如下sql语句:
Hibernate: update tbranchinfo set address=? where id=?
说明:
虽然重新设置了branchinfo关联的seal集合,但由于cascade=none,没有级联保存,
由于inverse=true,因此没有更新级联关系。
2、设置inverse=true cascade=save-update,测试代码不变,发出sql语句如下:
Hibernate: select max(id) from tseal
Hibernate: insert into tseal (sealName, id) values (?, ?)
Hibernate: update tbranchinfo set address=? where id=?
说明:
更新了branchinfo的address属性,由于设置cascade=save-update,
因此级联保存tseal表,由于inverse=true所以并没有维护关系
3、设置inverse=false cascade=none,发出sql语句如下:
Hibernate: update tseal set branchInfoId=null where branchInfoId=?
Hibernate: update tseal set branchInfoId=? where id=?
说明:
将原先的seal对象和branchInfo解除管理关系,并且更新新的seal和branch关联关系,但是由于
cascade=none所以没有将新seal插入表中因此在更新级联关系时报如下异常:
org.hibernate.TransientObjectException: object references an unsaved transient instance
4、设置inverse=false cascade=save-update发出sql语句如下:
Hibernate: select max(id) from tseal
Hibernate: insert into tseal (sealName, id) values (?, ?)
Hibernate: update tseal set branchInfoId=null where branchInfoId=?
Hibernate: update tseal set branchInfoId=? where id=?
将原先的seal对象和branchInfo解除关联关系,并且更新新的seal和branch关联关系
相关文章推荐
- Hibernate中cascade和inverse的相关
- hibernate集合映射inverse和cascade详解
- Hibernate【inverse和cascade属性】知识要点
- Hibernate映射中的Inverse和cascade
- Hibernate中inverse、cascade的说明
- Hibernate中inverse属性与cascade属性
- Hibernate中的Inverse和cascade属性配置
- hibernate级联(cascade和inverse)
- 重新学习 Hibernate fetch lazy cascade inverse 关键字
- Hibernate的学习之路二十五(cascade和inverse的区别)
- Inverse和cascade是Hibernate映射中最难掌握的两个属性
- hibernate中inverse和cascade的区别
- Hibernate的Cascade和Inverse属性
- 【Hibernate】的inverse与cascade区别?
- Hibernate中hbm.xml文件的inverse、cascade、fetch、outer-join、lazy
- Hibernate中的cascade和inverse
- Hibernate中的cascade和inverse
- Hibernate之中inverse与cascade的异同
- Hibernate 级联关系说明 - 关于cascade和inverse的用法
- hibernate inverse cascade详解