Hibernate之一对多(多对一)关系中的inverse和cascade属性

inverse  [ˌɪnˈvɜːrs] :外键的维护,由多的一方维护

"inverse" [ˌɪnˈvɜːrs] 直译过来就是"反转,使颠倒"的意思,书面化的解释为"是否将关系维护的权力交给对方"

1.  在hibernate中inverse默认是false,也就是己方拥有维护关系的权利, 当然为true的话,就是把维护关系的权利交给了对方

2.  在一对多的关系(多对一)中,通常将一端的inverse设置为true(一端设为false的话会多出更新语句,有性能问题,如学生和老师,一方老师要去记住那么多个学生会很辛苦,所以维护应该又多的一方),而多对多的关系中,inverse的值只能有一个为true,因为如果双发都为true,那么双方都去维护关系,会造成中间关系表中出现重复的数据。(这一点以后有深刻的理解,会补上解释的额)

 

cascade  [kæˈskeɪd]:对象是否关联,主要由一的一方联级

1.  "cascade"-直译过来就是"级联、串联"的意思,书面化的解释为"该属性会使我们在操作主对象时,同时Hibernate帮助我们完成从属对象 相应的操作

默认值是none:所有情况下均不进行关联操作。 

    (比如,有Customer和Order这两张表,关系为一对多,只使用JDBC删除Customer表中的一行记录时,我们还需要手动的将 Order表中与之关联的记录全都删除,使用Hibernate的'cascade'属性后,当我们删除一条Customer记录时,Hibernate 会帮助我们完成相应Order表记录的删除工作,方便了我们的工作)"。

 2.   用"cascade"属性时,主对象(一 方)一般设置为"all",而多方不建议设置包含delete操作的选项,建议设置多方为"save-update",这是因为你删除一方,多方已经没有 存在的意义了,而删除多方不能代表一方没意义了(例如,教室和学生)

总结:

inverse  一的那端为true,多对多中随便一端

cascade 一的那端为all,多的不能为all

一对多()

多对一: cascade不能为all, 没有inverse 属性  有insert,update属性

<property>的insert属性  设置为false,则在insert语句中不包含该字段,即该字段永远不能被插入。默认值:true.
<property>的update属性 设置为false,则在update语句中不包含该字段,即该字段永远不能更新。默认值:true.

多对多:cascade不能为all,inverse属性默认即可 

 

 

https://www.cnblogs.com/haozhengfei/p/6049276.html

 

posted @ 2020-03-29 14:58  你猜lovlife  阅读(364)  评论(0)    收藏  举报