hibernate多對多的關聯

2021-09-25 08:29:20 字數 4705 閱讀 5526

資料庫的多對多

資料庫中不能直接對映多對多

處理:建立乙個橋接表(中間表),將乙個多對多關係轉換成兩個一對多

注1:資料庫多表聯接查詢

永遠就是二個表的聯接查詢

a b c d

t1 c

t2 d

t3注2:交叉連線

注3:外連線:left(左)/right(右)/full(左右)

主從表:連線條件不成立時,主表記錄永遠保留,與null匹配

a b ab

select * from a,b,ab where a.aid=ab.aid and b.bid = ab.bid

where

在hibernate中,你只管查詢當前表物件即可,

hibernate會自動關聯橋表以及關聯表查詢出關聯物件

book category book_category

select * from book b,book_category bc,category where b.bid = bc.bid and bc.cid = c.cid

and bid = 2

所需的資料庫表

在這裡插入描述

實體類和實體類對映配置

book實體類

public class book implements serializable

public void setinitcategories(integer initcategories)

public integer getbookid()

public void setbookid(integer bookid)

public string getbookname()

public void setbookname(string bookname)

public float getprice()

public void setprice(float price)

public setgetcategories()

public void setcategories(setcategories)

@override

public string tostring()

public book(integer bookid, string bookname)

public book()

}

category實體類

public class category implements serializable

public void setcategoryid(integer categoryid)

public string getcategoryname()

public void setcategoryname(string categoryname)

public setgetbooks()

public void setbooks(setbooks)

@override

public string tostring()

treenode 實體類

public class treenode 

public void setnodeid(integer nodeid)

public string getnodename()

public void setnodename(string nodename)

public integer gettreenodetype()

public void settreenodetype(integer treenodetype)

public integer getposition()

public void setposition(integer position)

public string geturl()

public void seturl(string url)

public treenode getparent()

public void setparent(treenode parent)

public setgetchildren()

public void setchildren(setchildren)

public integer getinitchildren()

public void setinitchildren(integer initchildren)

// @override

// public string tostring()

@override

public string tostring()

各個實體類的配置

流程:流程:以查詢book_id=8聖墟這本書為例

1.通過建模反射自動生成sql,可以拿到book_id=8這條記錄的基本資訊

2.book_id=8—>bid=8去查詢中間表t_hibernate_book_category

拿到了cid=8,9

3.cid=8,9>t_hibernate_category的category_id=8,9

4.拿到當前book例項對應的category的集合

5.最終

->,{}]}

dao方法:

bookdao:

public class bookdao 

public integer addcategory(category category)

public category getcategory(category category)

public book getbook(book book)

transaction.commit();

session.close();

return b; }

public void delbook(book book)

public void delcategory(category category)

} session.delete(c);

transaction.commit();

session.close(); }

}

bookdaotest:

public class bookdaotest 

/*** book.hbm.xml inverse=fasle

* category.hbm.xml inverse=true

* 資料新增正常

* 書籍表、橋接表各新增一條資料

*/@test

public void test1()

/*** book.hbm.xml inverse=true

* category.hbm.xml inverse=true

* 只增加書籍表資料

* 橋接表不加資料

* 原因:雙方都沒有去維護關係

*/@test

public void test2()

treenodedao :

public class treenodedao 

transaction.commit();

session.close();

return t;

}}

treenodedaotest:

public class treenodedaotest 

//// @after

// public void teardown() throws exception

@test

public void testload()

}

最後測試的時候不要忘了配置路徑

Hibernate關聯關係(多對多)

hibernate的多對多關聯關係的重點就是它的配置和它的級聯操作 書籍對映檔案category.hbm.xml 級聯新增 inverse屬性值的設定 bookdao public class bookdao public integer addcategory category category ...

hibernate多對多關聯

一 配置雙向多對多關聯 以project類 專案 和emp類 員工 為例 1 建立project類,並需要定義集合型別的emp屬性 public class project public void setpid integer pid public string getpname public vo...

hibernate 的多對多的關聯和一對多的關聯

資料庫的多對多 1.1 資料庫中不能直接對映多對多 處理 建立乙個橋接表 中間表 將乙個多對多關係轉換成兩個一對多 注1 資料庫多表聯接查詢 永遠就是二個表的聯接查詢 a b c d t1 c t2 d t3a b ab select from a,b,ab where a.aid ab.aid a...