您的位置:首页 > 数据库

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关联关系

 

 

 

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息