資料庫的多對多
資料庫中不能直接對映多對多
處理:建立乙個橋接表(中間表),將乙個多對多關係轉換成兩個一對多
注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...