hibernate中的inverse和casecade

    hibernate中的inverse与cascade是个让人容易产生误解的属性,今天我终于有了正确的认识,总体上说inverse是指定哪个表作为维护端,cascade则是在操作某个表时,另一个表如何操作。

     以Father与Son为例,它们之间为一对多关系。

一、inverse属性

1、如果是单向一对多

   在set元素那里设置inverse为true,则插入father时(且调用father.setSons(sons),sons 是个set),son没有插入,如果设置inverse为false则插入father时(且调用father.setSons(sons),sons 是个set),则同时插入son。

2、如果是单向多对一

   此种配置没有inverse属性,设置cascade为合适值即可实现级联操作。可等价于一对多中的inverse=false

3、双向一对多(与双向多对一是一样的)

  set的inverse默认为false,当在一的一端的set中设置inverse为false时(many-to-one没有inverse属性,实际上就相当于many-to-one的"inverse"恒为false),调用session.save(),则将有2条update语句,实际上2条语句是一样的。此种设置方法是低效率的,因为执行来了2次实际上是一样的sql语句。通常将set中的inverse设置为true,这样当插入或更新时,只执行一次update语句。

   在双向一对多时,set的inverse设置为true,则须注意:通过father.setSons(sons)是无法保证son插入的,而通过son.setFather(father)可以保证father插入,因而在程序中最后同时设置father.setSons(sons),son.setFather(father).

  二、cascade属性

    cascade表示某一端进行某种操作时,另一端的关联操作。cascade属性只有在inverse属性设置为false才有意义,因为inverse为true表示不维护关系,即外键为null,如果此时对某一端执行某种操作,hibernate无法找到相应的另一端,自然也就无法对另一端执行相应操作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值