深入研究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時,莫要再用一的一端來維護關係,會出錯的!