传智播客Hibernate视频教程学习笔记21

 

 多对多关系的关联映射:

学生教师关系为例

Student.java

Teacher.java

Student.hbm.xml

Teacher.hbm.xml

 

<set name="students" table="teacher_student">

   <key column="teacher_id"></key>
   <many-to-many class="Student" column="student_id"></many-to-many>
 </set>  
表示Teacher类中的students成员变量以Teacher类的id成员变量=teacher_student表中的teacher_id为条件,查找teacher_student表中所有符合条件的student_id,在通过student_id在Student表中查找具体信息,完成关联。

 

 

test.java

一开始不设置关联,测试插入,成功。

Hibernate: insert into Student (name) values (?)
Hibernate: insert into Student (name) values (?)
Hibernate: insert into Teacher (name) values (?)
Hibernate: insert into Teacher (name) values (?)

四条插入语句。

teacher_student关联表也自动生成。关联表中teacher_id student_id均为主键 外键。

也说明Hibernate只要在满足数据库单表中符合约束的值均可正常插入,此处关联信息在生成表中,所以单表中不像一对多关系有外键约束。

 

 

加入以上代码以后运行,正确生成关联,

Hibernate: insert into Student (name) values (?)
Hibernate: insert into Student (name) values (?)
Hibernate: insert into Teacher (name) values (?)
Hibernate: insert into teacher_student (teacher_id, student_id) values (?, ?)
Hibernate: insert into teacher_student (teacher_id, student_id) values (?, ?)
Hibernate: insert into Teacher (name) values (?)

 

 

但是如果同时给学生也设置老师集合,则报主键冲突错误

Exception in thread "main" org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: domain.Teacher

其实学了关系映射以后,有一点一直不是很明白,Hibernate到底是怎么处理这种双向关系的,以前用jdbc模仿的时候也不会处理,只有一方为主来控制的,好像Hibernate也分主方从方,不明白。。。继续学习。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值