Hibernate的cascade屬性 特別是 cascadeType.all的 作用
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow
也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!
1.JPA中的CascadeType.ALL並不等於{CascadeType.PESIST,CascadeType.REMOVE,CascadeType.MERGE,CascadeType.REFRESH}
在Hibernate中呼叫session.save() or session.update()並不能觸發 {CascadeType.PESIST,CascadeType.REMOVE,CascadeType.MERGE,CascadeType.REFRESH} 的級聯操作,而能觸發CascadeType.ALL的級聯。如不希望用CascadeType.ALL,需要使用Hibernate自身對 cascade的註解 @Cascade(value=org.hibernate.annotations.CascadeType.SAVE_UPDATE)
2.共享主鍵的OneToOne方式不能通過cascade來自動生成識別符號 ,即使聲明瞭@GenericGenerator(name="foreign_key",strategy="foreign",parameters={@Parameter(name="property",value="person")})
@Entitypublic class Person implements Serializable { @Id @GeneratedValue(generator =
3.delete-orphan只應用在OneToMany中,能級聯刪除Many集合中的子元素。
NOTE:JPA並不支援delete-orphan,但並不明白hibernate reference中為什麼可以在OneToMany中新增屬性orphanRemoval=true的屬性。事實上,要用hibernate獨有的註解 @Cascade([email protected]_ORPHAN)來達到此目的。
--------------------------------------------------------------------------------
cascade屬性的可能值有 all: 所有情況下均進行關聯操作,即save-update和delete。 none: 所有情況下均不進行關聯操作。這是預設值。 save-update: 在執行save/update/saveOrUpdate時進行關聯操作。 delete: 在執行delete 時進行關聯操作。 all-delete-orphan: 當一個節點在物件圖中成為孤兒節點時,刪除該節點。比如在一個一對多的關係中,Student包含多個book,當在物件關係中刪除一個book時,此book即成為孤兒節點。