標籤:ora line app color ffffff nat 個人 cascade 通知
之前都是用工具逆向產生代碼,很少寫設定檔,今天試著使用,有幾點需要注意
Cascade(級聯):
Cascade代表是否執行級聯操作,Inverse代表是否由己方維護關係。
Cascade屬性的可能值有:
all: 所有情況下均進行關聯操作,即save-update和delete。
none: 所有情況下均不進行關聯操作。這是預設值。
save-update: 在執行save/update/saveOrUpdate時進行關聯操作。
delete: 在執行delete 時進行關聯操作。
all-delete-orphan: 當一個節點在對象圖中成為孤兒節點時,刪除該節點。比如在一個一對多的關係中,Student包含多個book,當在對象關係中刪除一個book時,此book即成為孤兒節點。
inverse(控制方向反轉):
一對多:該屬性在多的一方。應該在一方的設定 inverse=true ,多的一方設定 inverse=false(多的一方也可以不設定inverse屬性,因為預設值是false),這說明關聯關係由多的一方來維護。原因:該關聯關係的屬性在多的一方的表中,在維護關聯關係的時候在多的一方容易維護。
多對多:屬性在獨立表中。在任意一方設定inverse=true,另一方inverse=false;原因:如果兩個多設定為true 的話,表示兩方都對關聯關係表(獨立表)進行了同樣的維護,其實只要一方維護就行了,效率上來說,這樣設定是合理點的。
一對一:其實是一對多的一個特例,inverse 的設定也是一樣的,主要還是看關聯關係的屬性在哪一方,這一方的inverse=false。
多對一:也就是一對多的反過來,沒什麼區別。
模板:
如在同包中 class 可以不寫全限定名。(<hibernate-mapping package="包名">)
多對一:column 推薦填寫 屬性名稱+Id 如 userId
一對多:key column 拷貝 多對一 的column
多對多:key column 本對象名+Id,class 推薦填寫 關聯對象名 + Id
多對一:
<many-to-one name="屬性名稱" class="對方的類名" column="..."></many-to-one>
在表中:column 內所裝的內容,只可能是 class 中對方表的 Id 值,並且在表中會建立 column 列;
一對多:
<set name="屬性名稱">
<key column=" 多對一 的column "></key>
<one-to-many class="關聯對象名+Id"/>
</set>
name 為類中所使用的欄位,表中不會建立列,
之前在糾結,為什麼 key column 需要填寫,
多對一 是為了讓子表的 column 欄位新增內容時,尋找新增內容是否是主表的 Id 之一,也就是確認新增內容是否合法。
而 一對多 的 key column 是為了在使用中新增內容時,自動在子表 column 加入當前類的 主鍵。
多對多(肯定會有一張中間表):
<set name="屬性名稱" table="中間表名">
<key column="本對象名+Id"></key>
<many-to-many class="關聯對象名+Id" column="在表中對應的列名"></many-to-many>
</set>
中間表名推薦使用 兩表結合名 如:user_department ;
以上為個人理解,如有錯誤請通知我,謝謝
IDEA + SSH OA 第一天(項目收穫:Hibernate XML)