hibernate 映射四多对一双向映射
學生和班級的例子來說,多個學生可以對應一個班級。
1.站在學生角度來說,學生就是多端。那么我們可以通過多對一來維護2者的關系。
2.站在班級的角度來說,班級就是一端。那么我們可以通過一對多啦維護2者的關系。
3.我們也可以雙向關聯兩者的關系。(這個要牽涉到了反轉)
?
無論是多對一還是一對多,最終生成的數據庫的表中,都會在多的一端增加了一個外鍵來關聯一的一端。
?
首先先站在學生的角度上 多對一:
最終生成的數據庫:
?
下面是多對一映射中的字段意思:
?
一對多中:
?
生成的表結構和多對一 一樣。
保存的時候,先保存一端,然后保存多端。也就是先保存student,然后保存clazz。
但是這樣會造成一個問題,因為student中會多一個字段cid,但是保存student 的時候我們操作的是對象而不是數據庫
發后臺的語句:
?//保存student
?Hibernate: insert into Student (name, sex, age) values (?, ?, ?)? //并沒有插入cid的值,這也是為什么student的cid配置不能為null的原因。
?//保存class
?Hibernate: insert into Clazz (name) values (?)
?
?//commit的時候會發送更新語句。
?Hibernate: update Student set cid=? where id=?
所以我們不建議使用一端來維護多端。所以我們這就出現了反轉,把維護的工作交給了多端來維護。保存,修改,刪除,都由多端來維護。
所以在一端我們就可以加入??<set name="student" inverse="true">
inverse="true"是雙向關聯的概念,使用了這個,再進行一端維護多段是不能關聯cid的。所以就必須用多端維護。
?
下面就是雙向關聯:
?
?這樣,這樣進行保存的時候,只能先保存一端然后再保存多端。反之操作cid將不會update,cid也就不會有值。
?
反向工程:
點擊finish就可以了.
?
關于fetch,以后詳細再說。
?
?
?
?
轉載于:https://www.cnblogs.com/RanNing/p/3472257.html
總結
以上是生活随笔為你收集整理的hibernate 映射四多对一双向映射的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 获取linux服务器基本信息脚本
- 下一篇: 体验最火的敏捷——SCRUM(厦门,20