Hibernate中最重要的属性cascade和inverse
一 cascade的介绍
(1)casade用来说明当对主对象进行某种操作时是否对其关联的从对象也作类似的操作,常用的cascade:
none,all,
save-update ,delete, lock,refresh,evict,replicate,persist,
merge,delete-orphan(one-to-many)
一般对many-to-one,many-to-many不设置级联,在<one-to-one>和<one-to-many>中设置级联。
(2)cascade 对主对象进行操作时是否对从对象也进行操作,体现的是级联的思想
(3)cascade是最好把多的一方设置为主对象,当查询的时候即是更新order时,更新customers
(4)当把cascade设置到多的一方的时候,就会先去保存一的一方,再保存多的一方。执行的sql语句为:
Hibernate: insert into customers (realName, pass, sex, petName, email, rdate) values (?, ?, ?, ?, ?, ?)
Hibernate: insert into orders (number, address, phone, odate, sum, status, cid) values (?, ?, ?, ?, ?, ?, ?)
Hibernate: insert into orders (number, address, phone, odate, sum, status, cid) values (?, ?, ?, ?, ?, ?, ?)
Hibernate: insert into orders (number, address, phone, odate, sum, status, cid) values (?, ?, ?, ?, ?, ?, ?)
Hibernate: insert into orders (number, address, phone, odate, sum, status, cid) values (?, ?, ?, ?, ?, ?, ?)
Hibernate: insert into orders (number, address, phone, odate, sum, status, cid) values (?, ?, ?, ?, ?, ?, ?)
Hibernate: insert into orders (number, address, phone, odate, sum, status, cid) values (?, ?, ?, ?, ?, ?, ?)
Hibernate: insert into orders (number, address, phone, odate, sum, status, cid) values (?, ?, ?, ?, ?, ?, ?)
Hibernate: insert into orders (number, address, phone, odate, sum, status, cid) values (?, ?, ?, ?, ?, ?, ?)
Hibernate: insert into orders (number, address, phone, odate, sum, status, cid) values (?, ?, ?, ?, ?, ?, ?)
(5)当把cascade设置到一的一方的时候,会先保存多的一方,因为当保存了多的一方的时候,没有外键,所以当在插入一的一方的时候就会更新多的一方,执行的结果为:
Hibernate: insert into orders (number, address, phone, odate, sum, status, cid) values (?, ?, ?, ?, ?, ?, ?)
Hibernate: insert into orders (number, address, phone, odate, sum, status, cid) values (?, ?, ?, ?, ?, ?, ?)
Hibernate: insert into orders (number, address, phone, odate, sum, status, cid) values (?, ?, ?, ?, ?, ?, ?)
Hibernate: insert into orders (number, address, phone, odate, sum, status, cid) values (?, ?, ?, ?, ?, ?, ?)
Hibernate: insert into orders (number, address, phone, odate, sum, status, cid) values (?, ?, ?, ?, ?, ?, ?)
Hibernate: insert into orders (number, address, phone, odate, sum, status, cid) values (?, ?, ?, ?, ?, ?, ?)
Hibernate: insert into orders (number, address, phone, odate, sum, status, cid) values (?, ?, ?, ?, ?, ?, ?)
Hibernate: insert into orders (number, address, phone, odate, sum, status, cid) values (?, ?, ?, ?, ?, ?, ?)
Hibernate: insert into orders (number, address, phone, odate, sum, status, cid) values (?, ?, ?, ?, ?, ?, ?)
Hibernate: insert into customers (realName, pass, sex, petName, email, rdate) values (?, ?, ?, ?, ?, ?)
Hibernate: update orders set number=?, address=?, phone=?, odate=?, sum=?, status=?, cid=? where id=?
Hibernate: update orders set number=?, address=?, phone=?, odate=?, sum=?, status=?, cid=? where id=?
Hibernate: update orders set number=?, address=?, phone=?, odate=?, sum=?, status=?, cid=? where id=?
Hibernate: update orders set number=?, address=?, phone=?, odate=?, sum=?, status=?, cid=? where id=?
Hibernate: update orders set number=?, address=?, phone=?, odate=?, sum=?, status=?, cid=? where id=?
Hibernate: update orders set number=?, address=?, phone=?, odate=?, sum=?, status=?, cid=? where id=?
Hibernate: update orders set number=?, address=?, phone=?, odate=?, sum=?, status=?, cid=? where id=?
Hibernate: update orders set number=?, address=?, phone=?, odate=?, sum=?, status=?, cid=? where id=?
Hibernate: update orders set number=?, address=?, phone=?, odate=?, sum=?, status=?, cid=? where id=?
这是说服为什么把cascade放到多的一方的最好的证据,所以规范的写法就是 :
在多的一方加cascade=”save-update” 等参数
二 inverse 表示是否放弃维护权
1.inverse是决定的双向关联中哪一方来维护为表与表的关系,在没有设定的情况下,两端都维护,设置的参数为:
true 表示放弃维护权 会提高效率
false 表示是不放弃维护权
2.设置原则是:
在一对多的关系中,将在一的一方设置为主动方,在一的一方放弃维护的权利
在多的一方加cascade=”save-update”
在一的一方加 inverse=”true”
3.Inverse表示是否维护两者的关联关系,inverse的默认值是false,表示维护关联关系,当设置为true时,表示没有维护关联关系。使用的时候在一的一方应该放弃维护关联关系,来提高效率。即把一的一方设置为ture,在默认的情况下,双方都维护着关联关系。