Hibernate-mapping(一)串聯刪除,hibernate串聯刪除
Hibernate作為資料訪問層,它通過設定檔(hibernate.properties或hibernate.cfg.xml)和對應檔(***.hbm.xml)把JAVA對象或PO(PersistentObject,持久化對象)映射到資料庫中的資料庫,然後通過操作PO,對資料表中的資料進行增,刪,改,查等操作。
第一個設定檔hibernate.properties我沒有用過,現在Hibernate一般是交給Spring管理,多用applicationContex.xml設定檔管理。
第二個(***.hbm.xml)檔案,它是hibernate與資料庫的對象關係對應檔。結合具體執行個體,分析實體間的關係,在設定檔中是如何體現的吧。
一般說來,一個(***.hbm.xml)檔案,代表了一個實體Model類和一個資料庫table的關聯,如下:
<span style="font-size:18px;"><hibernate-mapping><class name="myShop.category.vo.Category" table="category"></class></hibernate-mapping></span>
這表明class類myShop.category.vo.Category對應表category;
現在有另外一個類CategorySecond,它和Category類是多對一的關係:
Category.hbm.xml設定檔
<span style="font-size:18px;"><hibernate-mapping><class name="myShop.category.vo.Category" table="category"><!-- 主鍵的建置原則 --><id name ="cid"><generator class="native"/></id><property name="cname"/><!-- 配置二級分類的集合 --><set order-by="csid" name="categorySeconds" lazy="false" inverse="true" cascade="delete"><key column="cid"/><one-to-many class="myShop.categorysecond.vo.CategorySecond"/></set></class></hibernate-mapping></span>
CategorySecond.hbm.xml設定檔
<span style="font-size:18px;"><hibernate-mapping><class name="myShop.categorysecond.vo.CategorySecond" table="categorysecond"><id name="csid"><generator class="native"/></id><property name="csname"/><!-- 二級分類與一級分類的關聯 --><many-to-one name="category" lazy="false" class="myShop.category.vo.Category" column="cid"></many-to-one> </class></hibernate-mapping></span>
結合上述2個設定檔,分析Hibernate-mapping設定檔。
在“一”的一方,設定檔中將會配置set節點資訊:
Lazy:預設是true使用消極式載入,false表示不消極式載入(即時載入);
Order-by:一的一方set集合內多的一方實體集合的排序方式預設是主鍵排序 但可以更改;
Inverse:反轉。True表示由對方負責控制,false表示由自己控制。true可以減少update語句,提高效能。
Cascade:是否使用級聯操作;屬性值:
all:所有情況下均進行關聯操作,即save-update和delete。
none:所有情況下均不進行關聯操作。這是預設值。
save-update:在執行save/update/saveOrUpdate時進行關聯操作。
delete: 在執行delete時進行關聯操作。
all-delete-orphan:當一個節點在對象圖中成為孤兒節點時,刪除該節點。比如在一個一對多的關係中,Student包含多個book,當在對象關係中刪除一個book時,此book即成為孤兒節點。
如果想要實現串聯刪除,只需配置“一”的一方的set節點: inverse="true"cascade="delete",這樣刪除“一”的一方後,在多的一方中引用到一的一方的主鍵的全部記錄也會被刪除。
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。