亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

為什么這兩句話都要寫。

為什么雙向的代碼都要寫啊?我測試只寫setgrade或者只寫getStudents().add,數據庫記錄都是正常的?。恐粚懸环N不行嗎?

stu1.setGrade(gra);

stu2.setGrade(gra);

gra.getStudents().add(stu1);

gra.getStudents().add(stu2);


正在回答

6 回答

沒有配置級聯:

GradeEntity?grade?=?new?GradeEntity("國家6","性別");
StudentEntity?student1?=?new?StudentEntity("美國6","男");
StudentEntity?student2?=?new?StudentEntity("法國6","女");
//配置多對1
student1.setGrade(grade);
student2.setGrade(grade);
//沒有配置級聯,所以3個都要保存
session.save(grade);
session.save(student1);
session.save(student2);

配置了級聯

GradeEntity?grade?=?new?GradeEntity("國家6","性別");
StudentEntity?student1?=?new?StudentEntity("美國6","男");
StudentEntity?student2?=?new?StudentEntity("法國6","女");
//1對多
grade.getStudent().add(student1);
grade.getStudent().add(student2);
//多對1
student1.setGrade(grade);
student2.setGrade(grade);
//配置級聯后主要寫save(grade)就好了,但是1對多的關系必須寫
session.save(grade);

看起來就這個區別

0 回復 有任何疑惑可以回復我~

剛才看了后面的內容,這么寫是為了后面講的級聯,為了級聯所以兩個都要寫

這里,如果grand和student都做save的話,只寫一個就可以了,偷了關聯的懶,少寫一個關聯

配置級聯后,只要save一個就可以了,兩者都是偷懶,級聯偷了save的懶

0 回復 有任何疑惑可以回復我~

我也覺得是重復的,這兩條語句都是為了包裝插入數據庫的時候都能有對應的值,如果一個就能實現,沒必要寫兩條

0 回復 有任何疑惑可以回復我~

我也有相同的疑問,我測試過只要寫setGrade就行了。再次查詢的時候也是可以通過Grade查找到Students的。

0 回復 有任何疑惑可以回復我~

還可以級聯操作。。往后看看就知道

0 回復 有任何疑惑可以回復我~

雙向的一方放棄關系的維護和單向意義不相同!
單向只能保證你可以通過一個對象(A)導航到另一個對象(B)。
當你在實際的業務中需要通過另一個對象(B)導航到一個對象(A)的時候,你怎么辦???
還有關于inverse="true",它的作用是在一對多雙向關聯關系中使一方放棄維護到對方的關系(抽象)。其實就是減少重復執行多余的SQL語句

簡單的說就是很好的我可以通過Grade找到student,也可以通過student找到Grade

1 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消
Hibernate初探之一對多映射
  • 參與學習       42163    人
  • 解答問題       310    個

Hibernate中一對多關聯映射配置,以及cascade和inverse屬性作用

進入課程

為什么這兩句話都要寫。

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號