级联操作和inverse

级联操作

  在映射文件中的关联元素中都有一个cascade属性,用来指定如果操纵与当前对象关联的其他对象。eg: cascade="all"

none: 在保存,更新,删除当前对象的时候忽略其他关联的对象。是cascade的默认值

save-update: 当通过Session的save(),update(),saveOrUpdate()方法来保存或者更新当前对象的时候级联保存所有关联的临时对象,级联更新所有关联的游离对象。

delete: 当通过Session的delete()方法删除当前对象的时候级联删除所有关联的对象。

all:包含save-update和delete的行为。

delete-orphan:删除所有和当前对象解除关联关系的对象。(只能在set中配置)

all-delete-orphan: 包含all和delete-orphan的行为

 

customer.getOrders.add(order1);

order1.setCustomer(customer);

 

 

inverse:负责控制关系

默认inverse="false" 只能显示在<set>放进行设置

  inverse真正的作用是指定由哪一方来维护之间的关联关系,当一方指定inverse="false"那么这一方就有责任负责之间的关联关系。.需要将其中的一方inverse="true"

  在一对多关系中,如果使用默认的inverse,那么意味着双方都可以维护关联关系,也就说在代码中可以仅仅用主方来维护从方,也可以用从方来维护主方,如果双向维护将会有一次重复更新。

  在多对多关系中,如果用双方的外键来作为桥表的主键,只能一方来维护关联关系,意味着必须要将其中的一方设置为inverse="true",不然将会造成主键冲突的异常。

 

  如果在配置中没有更改默认值,这时可以仅仅用主方来维护从方,也可仅仅用从方来维护主方!(如果配合级联使用,即对主方对象的操作要级联从方对象,那应该用主方来维护从房,反之亦然)。

  如果我们将<set>元素中 inverse显式设置为inverse="true",这时候意味主方对象不能维护关联关系,所以只能通过从方对象来维护。

 

 

<set inverse="true"  cascade="all">

主方不能维护关系,即使set集合中有数据,最后在插入数据库的时候,从方对象的外键也不能插入

 

Order

 

order.getLines.add(line)

 

session.save(order)

 

line  (  order_id)

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值