hibernate 單向一對多 和 雙向一對多


單向一對多:
在一的一端  實體內加一個set
            映射文件中加入

<set name="users">
        <key column="groupid"/>
        <one-to-many class="User" />
  </set>

 

 

這樣寫,需要先將多的一端保存,再保存一的一端,然後更新多的一端的外鍵:
sql:

 

Hibernate: insert into t_user (name, password, content) values (?, ?, ?)
Hibernate: insert into t_group (name) values (?)
Hibernate: update t_user set groupid=? where id=?

 

如果在set標籤內加入級聯:cascade="all"
這樣不用單獨保存多的一端,在保存一端的時候會級聯保存多的實體。
sql:

Hibernate: insert into t_group (name) values (?)
Hibernate: insert into t_user (name, password, content) values (?, ?, ?)
Hibernate: update t_user set groupid=? where id=?

 

這樣都會執行更新語句較麻煩

雙向一對多:
在一的一端,同 單向一對多的一
在多的一端,實體,加入一個“一”的實體
            映射文件加入:<many-to-one name="groupid" class="Group" />

sql:

Hibernate: insert into t_group (name) values (?)
Hibernate: insert into t_user (name, password, content) values (?, ?, ?)
Hibernate: update t_user set groupid=? where id=?

 

在一的一端 加入反轉控制: inverse="true"
sql:

Hibernate: insert into t_group (name) values (?)
Hibernate: insert into t_user (name, password, content, groupid) values (?, ?, ?, ?)

 

引自其它資料:

 

關於inverse屬性:
 inverse主要用在一對多和多對多雙向關聯上,inverse可以被設置到集合標籤<set>上,
 默認inverse爲false,所以我們可以從”一“一端和”多“一端維護關聯關係,
 如果設置成inverse爲true,則我們只能從多一端來維護關聯關係

  
inverse和cascade
 * inverse是關聯關係的控制方向
 * cascade操作上的連鎖反應

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章