在hibarbate如果你想實現許可權表的話,我們可以使用一對多的自關聯關係來實現:
首先實體類:
public class treenode
提供set/get方法,
這裡可以看到 set treenode children 這裡面放的是自己,
所以他是自關聯關係。
在xml裡的配置如下:
因為是自關聯,所以兩個配置都寫在乙個xml裡面,
方法:
public class treenodedao
transaction.commit();
session.close();
return t;
}
上篇部落格中提到過,initchildren是用來控制是否強載入的,因為許可權表,即有子節點也有父節點,當你查詢的時候會很耗效能,會把所有資源全載入出來,但你可能只需要乙個表的資源,所以用到initchildren來控制,但這樣也有個壞處,那就是如果你的表中有更多個的話,if判斷語句會有更多,這樣就造成**臃腫。
那有什麼方法可以解決呢?
這裡可以運用hibarnate的其他關聯關係:多地對多。
在這裡我運用二星許可權表來演示一下,
實體類 :
public class book
public class category
書可以有多個型別,而每個型別可以有多本書,即多對多。
二星許可權中第有乙個中間表,但這個中間表在這裡是可以不例項化的。交給這兩個表來維護即可。
但是還是要資料庫表的,兩條列即可,bookid 和 categoryid 。進行相對應。
book xml配置:
category xml配置 :
其實兩個配置是一樣的,因為是多對多。
之所以 categories 和 books裡面有值就是通過這個set獲得值的,
順序是:
首先獲得書的id然後通過key獲得中間表中的對應的cid,再通過cid獲得型別表,即通過cid得到型別的集合,即獲得成功。
在這裡要注意的是inverse=「false」,這個的意思就是交由誰來維護。
測試:
/**
* book.hbm.xml inverse=fasle
* category.hbm.xml inverse=true
* 資料新增正常
* 書籍表、橋接表各新增一條資料
*/@test
public void test1()
兩個資料表中都增加了資料進去。即成功 Hibernate關聯關係(多對多)
hibernate的多對多關聯關係的重點就是它的配置和它的級聯操作 書籍對映檔案category.hbm.xml 級聯新增 inverse屬性值的設定 bookdao public class bookdao public integer addcategory category category ...
Hibernate多對多關聯關係
今天遇到乙個問題 有乙個的類reckoning,乙個類accountitem。這兩個類之間的關係時多對多的關聯關係。一開始是由accountitem來維護關聯關係的,也就是reckoning.hbm.xml檔案中的如下 將inverse的值設為true.set name accountitems t...
Hibernate對映多對多雙向關聯關係(小案例)
多對多雙向關聯關係 project 工程 emp 員工 為案例 步驟如下 1 建立project類,並需要定義集合型別的emp屬性 public class project public void setpid integer pid public string getpname public vo...