Hibernate双向多对一映射
来源:互联网 发布:mac app store创建id 编辑:程序博客网 时间:2024/06/03 22:53
有两个类,一个Student类和一个Grade类。
public class Student { private int stuId; private String stuName; private int age; //多对一 private Grade grade; .......省略}
public class Grade { private int gradeId; private String gradeName; //一对多 private Set<Student> students = new HashSet<Student>(); ......省略}
Student.hbm.xml文件
<class name="Student"> <id name="stuId"> <generator class="native"></generator> </id> <property name="stuName"></property> <property name="age"></property> <!-- 多对一 --> <many-to-one name="grade" class="Grade" column="grade_Id"/></class>
Grade.hbm.xml文件
<class name="Grade"> <id name="gradeId"> <generator class="native"></generator> </id> <property name="gradeName"></property> <!-- students属性表示与Student的一对多关系 --> <set name="students" cascade="all"> <key column="grade_Id"></key> <one-to-many class="Student"/> </set></class>
此时我们由一的一端进行关系的维护,即Grade。
Student stu1 = new Student();stu1.setStuName("jack");stu1.setAge(20);Student stu2 = new Student();stu2.setStuName("rose");stu2.setAge(25);Grade g = new Grade();g.setGradeName("1105");g.getStudents().add(stu1);g.getStudents().add(stu2);session.save(g);
观察下sql语句:
Hibernate: insert into Grade (gradeName) values (?)Hibernate: insert into Student (stuName, age, grade_Id) values (?, ?, ?)Hibernate: insert into Student (stuName, age, grade_Id) values (?, ?, ?)Hibernate: update Student set grade_Id=? where stuId=?Hibernate: update Student set grade_Id=? where stuId=?
观察sql语句发现,每条insert语句都会对应一条update语句,由此我们可以知道插入的grade_Id可能为空,然后通过update语句进行的更新。
所以我们设置not-null = “true”,势必会报错,果不其然。
下面我们将由多的一段进行维护
Grade.hbm.xml
<class name="Grade"> <id name="gradeId"> <generator class="native"></generator> </id> <property name="gradeName"></property> <!-- students属性表示与Student的一对多关系 --> <set name="students" inverse="true"> <key column="grade_Id" not-null="true" /> <one-to-many class="Student"/> </set></class>
Student.hbm.xml
<class name="Student"> <id name="stuId"> <generator class="native"></generator> </id> <property name="stuName"></property> <property name="age"></property> <!-- 多对一 --> <many-to-one name="grade" class="Grade" column="grade_Id" not-null="true" cascade="all"/></class>
此时我已将外键置为不能为空。
观察sql语句
Hibernate: insert into Grade (gradeName) values (?)Hibernate: insert into Student (stuName, age, grade_Id) values (?, ?, ?)Hibernate: insert into Student (stuName, age, grade_Id) values (?, ?, ?)
因此在配置多对一的关联映射的时候,最好将关联控制交由多的一方进行维护。
阅读全文
1 0
- hibernate双向多对一映射关系
- hibernate ORM映射:双向多对一
- Hibernate双向多对一映射
- Hibernate多对多双向/单向映射(一)
- hibernate 关联映射 双向多对一(一对多)
- hibernate双向多对一映射文件写法:
- Hibernate关联映射_双向多对一
- Hibernate HelloWorld-07 双向多对一的映射关系
- hibernate注解之单/双向多对一映射
- hibernate映射(三) 之Hibernate双向一对多(多对一)映射
- Hibernate多对多双向关联映射
- hibernate映射多对双向关联
- Hibernate映射详解(二)--多对一,一对多单向,一对多双向关联映射
- Hibernate映射详解(二)--多对一,一对多单向,一对多双向关联映射
- Hibernate映射详解(二)--多对一,一对多单向,一对多双向关联映射
- Hibernate映射详解(二)--多对一,一对多单向,一对多双向关联映射
- Hibernate映射详解(二)--多对一,一对多单向,一对多双向关联映射
- Hibernate关联关系映射-----双向一对多/多对一映射配置
- Java-经典排序算法(二)——快速排序
- java泛型-转
- Spring4 MVC json问题(406 Not Acceptable)
- mybatis将执行的sql语句输出
- 常见排序算法
- Hibernate双向多对一映射
- 如何利用HTTP技术提升网页的加载速度
- splunk学习笔记——安装说明
- 利用GBDT模型构造新特征
- esxi
- Mybatis源码学习笔记(四) 配置详解之typeAliases
- flask+mysql+highcharts监控内存
- LoadRunner中如何对用户名、密码同时参数化
- 安卓测试小工具