Hibernate中Inverse和Cascade
Inverse和cascade是Hibernate映射中最難掌握的兩個屬性。兩者都在對象的關聯操作中發揮作用。 1.inverse屬性:inverse所描述的是對象之間關聯關系的維護方式。 inverse只存在于集合標記的元素中。Hibernate提供的集合元素包括<set/> <map/> <list/> <array /> <bag /> Inverse屬性的作用是:是否將對集合對象的修改反映到數據庫中。 inverse屬性的默認值為false,表示對集合對象的修改會被反映到數據庫中 inverse=”true”??表示對集合對象的修改不會被反映到數據庫中。 <one-to-many>中inverse的屬性的設置
例:Person中包含一個Child集合,Child包含一個Person對象。
要求:新建Person和Child對象,Child屬于此Person對象
分析:在數據庫中,就是新增一條Child記錄
????//one-to-many的inverse的配置 public void testInverse() {
?????? Qx qx = new Qx();
?????? qx.setQx("天山區");
?????? Jd jd = new Jd();
?????? jd.setJd("人民路");
?????? qx.getJds().add(jd);
?????? jd.setQx(qx); super.add(qx); super.add(jd);
}
配置Inverse=”false”,Hibernate的操作:
(1)Hibernate: insert into TBL_QX (qx) values (?)
(2)Hibernate: insert into TBL_JD (jd, qxid) values (?, ?)
(3)Hibernate: update TBL_JD set qxid=? where jdid=?
配置Inverse=”true”,Hibernate的操作
(1)Hibernate: insert into TBL_QX (qx) values (?)
(2)Hibernate: insert into TBL_JD (jd, qxid) values (?, ?)
可以看出:Inverse=”true”,SQL少執行一條更新操作(Java代碼不會少) <many-to-many>中inverse的屬性的設置
在多對多的關系中,可以在關聯的兩邊都不設置inverse屬性(默認的false),那么說明關聯的雙方都可以維護兩個對象之間的關聯關系。
注:在設置多對多關系的inverse屬性時,不能兩個對象都將其設置為true 2.cascade屬性 cascade屬性的作用是描述關聯對象進行操作時的級聯特性。因此,只有涉及到關系的元素才有cascade屬性。
具有cascade屬性的標記包括<many-to-one /> <one-to-one /> <any /> <set /><bag /> <idbag /> <list /> <array />
注意:<ont-to-many />和 <many-to-many />是用在集合標記內部的,所以是不需要cascade屬性的。
級聯操作:指當主控方執行某項操作時,是否要對被關聯方也執行相同的操作。 3.inverse和cascade的區別
作用的范圍不同: ????Inverse是設置在集合元素中的。 ?? Cascade對于所有涉及到關聯的元素都有效。 ?? <many-to-one/><ont-to-many/>沒有inverse屬性,但有cascade屬性
執行的策略不同 ?? Inverse 會首先判斷集合的變化情況,然后針對變化執行相應的處理。 ?? Cascade 是直接對集合中每個元素執行相應的處理
執行的時機不同 ????Inverse是在執行SQL語句之前判斷是否要執行該SQL語句 ????Cascade則在主控方發生操作時用來判斷是否要進行級聯操作
執行的目標不同 ????Inverse對于<ont-to-many>和<many-to-many>處理方式不相同。
??對于<ont-to-many>,inverse所處理的是對被關聯表進行修改操作。
??對于<many-to-many>,inverse所處理的則是中間關聯表 ????Cascade不會區分這兩種關系的差別,所做的操作都是針對被關聯的對象。
總結: <one-to-many>中,建議inverse=”true”,由“many”方來進行關聯關系的維護 <many-to-many>中,只設置其中一方inverse=”false”,或雙方都不設置 Cascade,通常情況下都不會使用。特別是刪除,一定要慎重
總結
以上是生活随笔為你收集整理的Hibernate中Inverse和Cascade的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 对struts一点理解总结
- 下一篇: 干啥啥不行,吃啥啥有够。我是不是废了?