传智播客Hibernate视频教程学习笔记21
来源:互联网 发布:nginx 隐藏版本号 编辑:程序博客网 时间:2024/06/04 18:12
多对多关系的关联映射:
学生教师关系为例
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也分主方从方,不明白。。。继续学习。。。
- 传智播客Hibernate视频教程学习笔记21
- 传智播客Hibernate视频教程学习笔记1
- 传智播客Hibernate视频教程学习笔记2
- 传智播客Hibernate视频教程学习笔记3
- 传智播客Hibernate视频教程学习笔记4
- 传智播客Hibernate视频教程学习笔记5
- 传智播客Hibernate视频教程学习笔记6
- 传智播客Hibernate视频教程学习笔记7
- 传智播客Hibernate视频教程学习笔记8
- 传智播客Hibernate视频教程学习笔记9
- 传智播客Hibernate视频教程学习笔记14
- 传智播客Hibernate视频教程学习笔记15
- 传智播客Hibernate视频教程学习笔记16
- 传智播客Hibernate视频教程学习笔记17
- 传智播客Hibernate视频教程学习笔记18
- 传智播客Hibernate视频教程学习笔记19
- 传智播客Hibernate视频教程学习笔记20
- 传智播客Hibernate视频教程学习笔记22
- 哈哈…美好的明天!加油 !
- NeHe OpenGL教程 (五)
- 计算机语言学习的三个境界
- Delphi TThread中文注释
- 黑盒测试的测试用例设计方法
- 传智播客Hibernate视频教程学习笔记21
- 关于打宽包针的问题
- Linux下的一个简单汇编程序, .long声明数据的长度问题!
- delphi下 用assert来完成错误的捕捉
- NeHe OpenGL教程 (六)
- 传智播客Hibernate视频教程学习笔记22
- The Zen of Python
- vbox安装,启动错误:Error: unable to find the sources of your current Linux kernel. Specify KERN_DIR= and run Make again. Stop.
- 线程的基础知识