雙向多對多會通過乙個中間表來維持關聯關係;
雙向多對多關係中必須指定乙個關係維護端;否則中間表裡會出現主鍵重複的問題;
例如:標籤類tags和商品類goods;乙個標籤可對應多種商品;乙個商品也能有多個標籤;
首先在兩個類中各建乙個對方型別的set作屬性;
用到的註解解釋:
商品類goods:
需要用@jointable來指定中間表裡的屬性;
用@manytomany來表示關聯關係;
//雙向多對多對映
@jointable(
name="tb_g_to_t",
joincolumns=,
inversejoincolumns=
)@manytomany
private settagset;
標籤表tags:
private setgoodsset;
1.插入
//插入
@test
public void testinsert()
結果:hibernate:
insert
into
tb_goods
(gname)
values
(?)hibernate:
insert
into
tb_goods
(gname)
values
(?)hibernate:
insert
into
tb_tags
(name)
values
(?)hibernate:
insert
into
tb_tags
(name)
values
(?)hibernate:
insert
into
tb_g_to_t
(g_id, t_id)
values
(?, ?)
hibernate:
insert
into
tb_g_to_t
(g_id, t_id)
values
(?, ?)
hibernate:
insert
into
tb_g_to_t
(g_id, t_id)
values
(?, ?)
hibernate:
insert
into
tb_g_to_t
(g_id, t_id)
values
(?, ?)
執行了8條插入語句;
兩個實體表各插入兩條;中間表插入了四條;
2.查詢
無論先查維持關聯關係的一端還是先查不會維護關聯關係的一端都預設使用懶載入;
因為有一張中間表來做外來鍵對映,對於兩張表來說都是平等的;
雙向關聯多對多
inverse 反轉 1 inverse false 表示為主控方,主控方負責維護關聯關係,一般在一對多關係中,把多的一方設定為inverse false 2 lazy false表示是延遲載入,當為true時,啟動延遲載入,如兩個關聯a,b不延遲載入時可能載入a時候,也把b載入了,但你可能沒用b,...
雙向的多對一或者雙向的一對多
一對多或者多對一都是從一方來看,雙向是從兩個方向來看 這個時候持久化類的一放要有多方的屬性,多方要包含一方的屬性.在對映的檔案當中也是.兩邊都要配置,以便是one to many 另一邊是many to one 在測試方法裡,可以從一方看的方式來查詢,更 一對多多對一的差不多 可以在對映檔案裡配置i...
雙向一對多
雙向一對多是many to one的雙方都有用註解來維持關聯關係 many的一方 joincolumn name d id manytoone fetch fetchtype.lazy private dept dept one的一方 一對多關聯 joincolumn name d id oneto...