为了账号安全,请及时绑定邮箱和手机立即绑定

为何我执行了session.save(grade); 没有更新?一定要加st.setGrade(grade); 还有为何只save了grade,却把student也更新了

第一个问题:

GradeEntity grade = new GradeEntity("班级1","实验班");
StudentEntity st = session.get(StudentEntity.class,1);
grade.getStudent().add(st);  
st.setGrade(grade);     //一定要有这行,没有的话,就是只有insert
session.save(grade);
Hibernate: select max(gid) from grade
Hibernate: insert into grade (gdesc, gname, gid) values (?, ?, ?)

第二个问题,即使我加了,这里也是只执行了session.save(grade);,为什么学生的信息也更新了

这里还没到级联呢,不应该是只save grade么

虽然我知道肯定是内部实现的,从打印的数据库语句可以看出来:

Hibernate: select max(gid) from grade
Hibernate: insert into grade (gdesc, gname, gid) values (?, ?, ?)
Hibernate: update student set gid=?, sex=?, sname=? where sid=?

最后是更新操作,但是光看这个session.save(grade)还是很奇怪。

正在回答

3 回答

你这段代码事物(transaction)没有开,也没有提交

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

session.save(grade)是添加班级;

grade.getStudent().add(st); 往新班级添加学生

班级表与学生被从物理层面有关联关系,所以学生信息跟着改变。

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

第一个问题的答案是,我的代码控制权默认是在多方的,对1方进行操作,不会进行关系的维护

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

举报

0/150
提交
取消
Hibernate初探之一对多映射
  • 参与学习       42157    人
  • 解答问题       310    个

Hibernate中一对多关联映射配置,以及cascade和inverse属性作用

进入课程

为何我执行了session.save(grade); 没有更新?一定要加st.setGrade(grade); 还有为何只save了grade,却把student也更新了

我要回答 关注问题
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号