JPA定義Model關系中有orphanRemoval 這個參數。其作用您是否了解?
orphanRemoval介紹和作用
上面截圖的jpa的官方文檔以及jpa規范中明確說明,如果javaBean中父實體和子實體之間有一對一或一對多的級聯關系的時候,如果我們想要刪除父實體,也必須要級聯刪除子實體,需要被刪除的級聯關系中的子實體則被稱為孤兒實體。
orphanremoval屬性的主要作用就是標記是否可以刪除孤兒實體,假設我們這里有一個訂單的案例,訂單下面有許多行記錄,假設我們刪除其中的一行記錄的話,需要被刪除的這一行記錄就被稱作是孤兒,當我們設置這個屬性為true的時候,意思就是我們可以從這個訂單的所有記錄中刪除標記為孤兒的這條記錄。
屬性詳解和案例代碼
@OneToMany(mappedBy="parent",targetEntity=Child.class,cascade={CascadeType.ALL},orphanRemoval=true)privateList<Child>children=newArrayList<Child>();@OneToMany(mappedBy="parent",targetEntity=Son.class,cascade={CascadeType.ALL},orphanRemoval=true)privateList<Son>son=newArrayList<Son>();Fistly,wesaveOneParenthavetwoSonandtwoChildindatabase:Parentp=newParent();Childc1=newChild();Childc2=newChild();Sons1=newSon();Sons2=newSon();p.setParentName("AAA");c1.setChildName("BBB");c2.setChildName("CCC");s1.setName("s1");s2.setName("s2");//setrelationshipp.getChildren().add(c1);p.getChildren().add(c2);p.getSon().add(s1);p.getSon().add(s2);c1.setParent(p);c2.setParent(p);s1.setParent(p);s2.setParent(p);em.merge(p);sowecanseeitindatabase:MySQL>select*fromParent;+----+------------+|id|parentName|+----+------------+|1|AAA|+----+------------+mysql>select*fromChild;+----+-----------+-----------+|id|childName|parent_id|+----+-----------+-----------+|1|BBB|1||2|CCC|1|+----+-----------+-----------+mysql>select*fromSon;+----+------+-----------+|id|name|parent_id|+----+------+-----------+|1|s1|1||2|s2|1|+----+------+-----------+thenwecanusemergetoremoveorphanedentities.Atfirst,weshouldceateatestData.Parentp=newParent();//setidtotheentity,whenthereiscorrespongdingrecordindatabase,justupdate.p.setId(1);Childc1=newChild();c1.setId(1);c1.setChildName("c3");Sons2=newSon();s2.setId(2);s2.setName("c4");//newChildandSonEnity,andaddittoParent'sList.Withoutid,sojpawillsaveanewrecordforthem,idauto-increment.Childc=newChild();c.setChildName("childNew");c.setParent(p);p.getChildren().add(c);Sons=newSon();s.setName("sonNew");s.setParent(p);p.getSon().add(s);//atlast,mergetherootEntityParent,whenwesettheorphanRemovaltruein@OneToMany,theChild(id=2)Son(id=1)entitywillbedeletedwhenthelineitemisremovedfromtheorder.em.merge(p);thenwecanseeitindatabase:mysql>select*fromParent;+----+------------+|id|parentName|+----+------------+|1|AAAnew|+----+------------+mysql>select*fromChild;+----+-----------+-----------+|id|childName|parent_id|+----+-----------+-----------+|1|c3|1||3|childNew|1|+----+-----------+-----------+recordwithid=2isremoved.mysql>select*fromSon;+----+--------+-----------+|id|name|parent_id|+----+--------+-----------+|2|c4|1||3|sonNew|1|+----+--------+-----------+recordwithid=1isremoved.
與cascade的關系
二者的作用范圍不一樣,cascade的作用范圍是數據庫,當cascade屬性設置了delete時,當刪除級聯關系中的子集時,順便也會將數據庫中對應的數據刪除。orphanremoval屬性的作用范圍僅僅是java應用代碼中,做級聯刪除的操作也只適用于java實體代碼范疇,它可以清楚javabean的級聯關系,但并不能影響數據庫的數據,只要cascade不點頭是無法刪除掉數據庫的數據的
上述就是小編為大家分享的JPA中orphanRemoval 屬性有什么用了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注本站行業資訊頻道。
本文由 貴州做網站公司 整理發布,部分圖文來源于互聯網,如有侵權,請聯系我們刪除,謝謝!
c語言中正確的字符常量是用一對單引號將一個字符括起表示合法的字符常量。例如‘a’。數值包括整型、浮點型。整型可用十進制,八進制,十六進制。八進制前面要加0,后面...
2022年天津專場考試原定于3月19日舉行,受疫情影響確定延期,但目前延期后的考試時間推遲。 符合報名條件的考生,須在規定時間登錄招考資訊網(www.zha...
:喜歡聽,樂意看。指很受歡迎?!巴卣官Y料”喜聞樂見:[ xǐ wén lè jiàn ]詳細解釋1. 【解釋】:喜歡聽,樂意看。指很受歡迎。2. 【示例】:這是...
美國次貸危機(subprime crisis)也稱次級房貸危機,也譯為次債危機。它是指一場發生在美國,因次級抵押貸款機構破產、投資基金被迫關閉、股市劇烈震蕩引起的金融風暴。那么,美國次貸危機爆發的主要原因是什么?美國次貸危機如何解決的?一起來看看吧!美國次貸危機爆發的主要原因有:1.美國金融監管當局,特別是美聯儲貨幣政策的松緊變化。2.美國投資市場,以及全球經濟和投資環境一段時期內,情緒樂觀、持續...
從過去到現在通貨膨脹一直都是我們所在生活中多擔心的問題。我們每個人都一直在與之抗爭,希望能打贏他們保護我們的財富。當流通中的貨幣量大于有效經濟總量時就會發生通貨膨脹。主要的表現就是市場上商品的整體價格上漲。就是錢多了但是能買的東西沒有發生變化。當通貨膨脹發生時,價格上漲是一個有規律以及有系統的過程:首先漲的是生活必需品,比如糧、米、面、油。因為是必需品,所以他們在任何時候都是人們生活最基本的保障。...
全面兩孩是什么意思?這意味著二胎政策子的政策已經完全自由化。無論父母雙方是什么情況,無論雙方都是獨生子女,單方面是獨生子女,還是非獨生子女,都可以生第二個孩子。單獨生第二個孩子是指只要父母一方是獨生子女,就允許生第二個孩子,雙方都是獨生子女,也允許生第二個孩子。單獨二胎實施省份有哪些?1.自2014年1月17日起,浙江省實施了單獨的二胎政策2014年1月13日浙江省通過,自公布之日(2014年1月...