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

2021-08-29 23:40:59 字數 3326 閱讀 9085

資料庫的多對多

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

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

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

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

a   b   c  d

t1 c

t2 d

t3a b ab

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

where

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

hibernate會欄位關聯橋表以及關聯表查詢出關聯物件

這是多對多的乙個例子

查詢一本書為例

session .get(book.class, 1)

select * from t_hibernate_book where book_id = ?(1)

resultset -> 1 西遊記 50

book b = class.forname ("com.zking.five.entity.book").new instance();

b.setbook_id(1);

b.setbook_name(西遊記);

b.getprice(50);

hibernate 處理關聯關係

1、通過 set 標籤 找到橋接表(table 屬性),

2、找到當前實體類對應表的主鍵在橋接表中的外來鍵(key 標籤中的column屬性中定義)

3、查出關聯表 (t_hibernate_category)中的主鍵(category_id )

select cid from t_hibernate_book_category where bid = ?(1)

resultset -> 關注最後的一列

8 1 1

9 1 2

list1/ 2

4、查出來的外來鍵關聯的實體類(class = com.zking.five.entity.category),它可以與

這個類的對映檔案(class 標籤中name =com.zking.five.entity.category),從而

找到了對應的實體類對應的表的主鍵id標籤中的colum欄位 -》category_id

select * from t_hibernate_category where category_id = ?(1)

select * from t_hibernate_category where category_id = ?(2)

list1 古典

2 神話

class.forname ("com.zking.five.entity.category").new instance();

參照entitybasedao -> listcategories

5.b.setcategories(categories);

#關鍵點都在資料庫中的外來鍵上面,請好好理解下面這二句sql和一對多及多對一的關係

#select * from orders where cid=? //這條sql返回客戶對應的0-n個訂單

#select * from customers where customerid=? //這條sql返回訂單對應的1個客戶

#通過這二條sql不難看出,外來鍵在這裡有二個用途:查詢客戶的訂單,查詢訂單對應的客戶

2. 案例:如何建立客戶和訂單一對多雙向關聯

2.1 先不建立客戶和訂單的關聯關係,定義實體及對映檔案,單獨執行儲存操作

2.2 建立客戶到訂單的一對多關聯關係

2.3 建立訂單到客戶的多對一關聯關係

2.4 注意:在hibernate當中定義實體物件的集合屬性時,只能使用介面而不能使用類

ps :這是多對多的關聯查詢

實體類的**:

1.這是書籍的**:

public class book 

public void setinitcategorys(integer initcategorys)

public setgetcategories()

public void setcategories(setcategories)

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 class category 

public void setinitbooks(integer initbooks)

public setgetbooks()

public void setbooks(setbooks)

public integer getcategoryid()

public void setcategoryid(integer categoryid)

public string getcategoryname()

public void setcategoryname(string categoryname)

}

這是配置實體類的xml檔案

配置書籍的xml:

<?xml version="1.0" encoding="utf-8"?>

配置書籍型別的xml檔案

<?xml version="1.0" encoding="utf-8"?>

dao方法

//這是書籍的查詢

public book get(book book)

transaction.commit();

session.close();

return b;

}//這是書籍型別的查詢方法

public category get(category category)

transaction.commit();

session.close();

return c;

}

hibernate的多對多

近日工作中遇到多對多,以前未曾用過hibernate,這次也算是摸著石頭過河。之前試驗了級聯的cascadetype.all,卻發現當刪除部門表的時候,中間表資料刪除了,結果將人員表相關聯的資料也全部刪除了。後來將級聯改為cascadetype.persist,cascadetype.merge,倒...

hibernate的多對多

1.herbernate一對多自關聯 樹形選單查詢可能出現的問題 當載入一級節點的時候沒問題 強制載入 載入二級載入時候,由於設定了強制載入,同樣可以載入出所有的二級節點。沒問題 載入 節點時,這是session關閉了,並且預設採用的是懶載入 許可權選單載入有兩種方式 1 一次性將資料庫表中的資料全...

hibernate的多對多

多對多關聯是hibernate中一種比較特殊的關聯,它需要借助中間表來完成多對多資訊的儲存。多對多關聯只有雙向關聯。資料庫的多對多 資料庫中不能直接對映多對多 處理 建立乙個橋接表 中間表 將乙個多對多關係轉換成兩個一對多。hibernate的多對多 hibernate可以直接對映多對多關聯關係 看...