Hibernate---inverse,cascade(2)

接上:

2、将inverse设置为false;将casecade设置为none,保持测试代码不变。

发出如下sql语句:

Hibernate: insert into tbranchinfo (address, depname, id) values (?, ?, ?)插入分支机构信息
Hibernate: update tseal set branchInfoId=? where id=?更新关联关系,但是并没有插入seal,原因在于cascade=none
于是会报异常如下
org.hibernate.TransientObjectException: object references an unsaved transient instance - save
the transient instance before flushing: com.indigopacific.iessportal.persistent.Seal
没有保存一个瞬时的seal对象

3、将inverse设置为true,将casecade设置为save-update,保存测试代码不变。

发出如下sql语句:

Hibernate: insert into tbranchinfo (address, depname, id) values (?, ?, ?)
Hibernate: insert into tseal (sealName, id) values (?, ?)

说明:

由于inverse=true将维护级联关系的任务交给了seal,因此当保存branchinfo时不会考虑级联关系。

只发出插入tseal的语句,不会更新级联关系。

4、将inverse设置为true,将casecade设置为none,保持测试带不变

发出如下sql语句:

Hibernate: insert into tbranchinfo (address, depname, id) values (?, ?, ?)

说明:
只会插入branchinfo信息,不会级联保存seal,不会更新关系

你可能感兴趣的:(Hibernate)