Hibernate(7)关系映射和Cascade级联操作
来源:互联网 发布:任天堂游戏机淘宝 编辑:程序博客网 时间:2024/06/05 10:23
1 关联关系映射
- 多对一(Employee-Department)
- 一对多(Department-Employee)
- 一对一(Person-IdCard)
- 多对多(teacher-student)
- cascade(Employee-Department)
2 多对一(Employee-Department)
**domain文件:**Studcourse.java
public class Studcourse { private BigDecimal stucourseid; private Student student; private Course course; private BigDecimal grade;}
**配置文件:**Studcourse.hbm.xml
<many-to-one name="student" class="com.test.domain.Student" fetch="select"> <column name="SID" precision="22" scale="0" /></many-to-one>
3 一对多(Department-Employee)
**domain文件:**Student.java
public class Student implements java.io.Serializable { private BigDecimal sid; private String sname; private Set studcourses = new HashSet(0);}
**配置文件:**Student.hbm.xml
<set name="studcourses" inverse="true"> <key> <column name="SID" precision="22" scale="0" /> </key> <one-to-many class="com.test.domain.Studcourse" /></set>
4 一对一(Person-IdCard)
有两种方式:基于主键的一对一;基于外键的一对一。
①基于主键的一对一
**domain文件:**Person.java和IdCard.java
class Person{ private Integer id; private String name; private IdCard idCard;}class IdCard { private Integer id; private Date validateDte; private Person person;}
配置文件:
Person.hbm.xml
<one-to-one name="idCard" class="com.test.domain.IdCard"></one-to-one>
IdCard.hbm.xml
<id name="id" type="java.lang.Integer"> <generator class="foreign"> <param name="property">person</param> </generator></id><one-to-one name="person" class="com.test.domain.Person" constrained="true"></one-to-one>
②基于外键的一对一
**domain文件:**Person.java和IdCard.java
class Person{ private Integer id; private String name; private IdCard idCard;}class IdCard { private Integer id; private Date validateDte; private Person person;}
配置文件:
Person.hbm.xml
<one-to-one name="idCard" class="com.test.domain.IdCard"></one-to-one>
IdCard.hbm.xml
<id name="id" type="java.lang.Integer"> <generator class="assigned" /></id>// one-to-one实际上是many-to-one的一个特例<many-to-one name="person" unique="true" />
5 多对多(teacher-student)
在操作和性能方面都不太理想,所以多对多的映射使用较少,实际使用中最好转换成一对多的对象模型;Hibernate会为我们创建中间关联表,转换成两个一对多。
domain文件:
public class Student implements java.io.Serializable { private BigDecimal sid; private String sname; private Set studcourses = new HashSet(0);}public class Course implements java.io.Serializable { private BigDecimal cid; private String cname; private Short ccredit; private Set studcourses = new HashSet(0);}public class Studcourse { private BigDecimal stucourseid; private Student student; private Course course; private BigDecimal grade;}
配置文件:
Student.hbm.xml 和 Course.hbm.xml
<set name="studcourses" inverse="true"> <key> <column name="S_ID" precision="22" scale="0" /> </key> <one-to-many class="com.test.domain.Studcourse" /></set>
Studcourse.hbm.xml
<many-to-one name="student" class="com.test.domain.Student" fetch="select"> <column name="S_ID" precision="22" scale="0" /></many-to-one><many-to-one name="course" class="com.test.domain.Course" fetch="select"> <column name="C_ID" precision="22" scale="0" /></many-to-one>
6 cascade(Employee-Department)
- Cascade用来说明当对主对象进行某种操作(添加、修改、删除……)时(比如删除一个部门时,删除该部门所有员工),是否对其关联的从对象也作类似的操作。
- 常用的cascade:
none, all, save-update, delete, lock, refresh, evict, replicate, persist, merge, delete-orphan(one-to-many) - 一般在many-to-one,many-to-many中不设置级联,在one-to-one, one-to-many中设置级联。
- 在集合属性和普通属性中都能使用cascade
- 一般讲,cascade配置在one-to-one(主对象一方), one-to-many(one的一方)
<set name="studcourses" inverse="true" cascade="all"> <key> <column name="SID" precision="22" scale="0" /> </key> <one-to-many class="com.test.domain.Studcourse" /></set>
0 0
- Hibernate(7)关系映射和Cascade级联操作
- Hibernate Annotation关系映射, 级联cascade属性
- Hibernate Annotation关系映射, 级联cascade属性
- hibernate中关系操作(inverse)和级联操作(cascade)详解
- Hibernate (cascade)级联关系
- Hibernate (cascade)级联关系
- Hibernate级联操作Cascade
- Hibernate 级联操作 cascade
- Hibernate cascade 级联操作
- Hibernate级联操作cascade
- HIbernate级联操作cascade以及inverse管理关系
- hibernate 级联(cascade和inverse)
- hibernate 级联(cascade和inverse)
- hibernate之级联cascade和关系维持inverse
- hibernate之级联cascade和关系维持inverse
- hibernate之级联cascade和关系维持inverse
- hibernate之级联cascade和关系维持inverse
- Hibernate学习---第十六节:cascade(级联)和inverse关系详解
- 文件与目录管理
- 语义分割(semantic segmentation) 常用神经网络介绍对比-FCN SegNet U-net DeconvNet
- QSerialPort处理串口通信简单示例
- [LeetCode OJ]Triangle
- Swift 中CGAffineTransform的写法
- Hibernate(7)关系映射和Cascade级联操作
- caffe之特征图可视化及特征提取
- yii 批量修改 批量查询
- 欢迎使用CSDN-markdown编辑器
- Android手机上,利用bat脚本模拟用户操作
- Git的思想和基本工作原理
- hibernate的映射关系之一对多
- 迭代循环-Thymeleaf常见用法(四)
- 基于qualcomm平台Dragonboard 410c 的LCD driver移植解析