Hibarnate關聯關係 多對多

2021-09-25 08:27:16 字數 1374 閱讀 1402

在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...