1. 程式人生 > >深入研究Hibernate之三:一對多的雙向

深入研究Hibernate之三:一對多的雙向

這樣:若沒有inverse="true",則發如下sql

Hibernate: select hibernate_sequence.nextval from dual

Hibernate: insert into t_student (name, idcard, cid, id) values (?, ?, ?, ?)

Hibernate: insert into t_student (name, idcard, cid, id) values (?, ?, ?, ?)

Hibernate: insert into t_classroom (name, classno, id) values (?, ?, ?)

Hibernate: update t_student set cid=? where id=?

Hibernate: update t_student set cid=? where id=?

三條插入,兩條更新,這和manytoone的時候意思是一樣的

<set name="stus" lazy="extra" inverse="true">

<key column="cid" />

<one-to-many class="Student" />

</set>

若是加上inverse="true"

Sql:

Hibernate: select hibernate_sequence.nextval from dual

Hibernate: insert into t_student (name, idcard, cid, id) values (?, ?, ?, ?)

Hibernate: insert into t_student (name, idcard, cid, id) values (?, ?, ?, ?)

Hibernate: insert into t_classroom (name, classno, id) values (?, ?, ?)

此時資料庫的儲存會不對!!!!!!!!

inverse="true"明確表示一的一端不維護關係

若你加上inverse="true"還要用一的一端來維護關係,那麼對不起,等著出錯吧!!

總上所述:

1、若對映為單向,many-to-one要優於one-to-many,原因很明顯,用一的一端來維護關係比較麻煩

2、Save物件時,要先save一的一端,然後在save多的一端(設定其一的一端的屬性)

3、加上inverse時,莫要再用一的一端來維護關係,會出錯的!