Hibernate学习小结之实体对象之间关系
2012-09-22 15:32
369 查看
双向一对一关系:
实体对象之间一对一的关联是通过数据库的外键实现的
外键的使用有以下两种方式:
主键关联: 不需要借助额外字段,直接通过两个表的主键来关联,两表中相关联的记录要使用相同的主键值
唯一外键关联 :某个表的外键字段关联到另一个表的主键字段上,是多对一关联的特例
主键关联:
首先需要在Student对象的配置文件中定义到Address对象的关联:
<one-to-one name="address" class="Address" ></one-to-one>
然后需要在Address对象的配置文件中定义到Student对象的关联
<one-to-one name="student" class="Student" cascade="all"></one-to-one>
并修改Address对象配置文件的id元素
<id name="id" column="id">
<generator class="foreign">
<param name="property">student</param>
</generator>
</id>
唯一外键关联:
为每一个Address配给一个Student,形成一对一,address表格通过student_id作为外键参考至student:
Student.hbm.xml文件:
<one-to-one name="address" class="Address" property-ref="student" ></one-to-one>
在<one-to-one>中,property-ref告诉Hibernate,查询出
address 并将其参考至
student 。
Address.hbm.xml文件:
<many-to-one name="student" class="Student" column="student_id"
unique="true" fetch="join" ></many-to-one>
unique="true":使多对一变成一对一
在多的一端加入一个外键,参考一的一端,加载多的一端,一的一端自动加载进来
双向一对多关联关系:
Clazz类文件代码如下:
public class Clazz {
private Long id;
private String Name;
private Set<Student> students = new HashSet<Student>();
}
Clazz.hbm.xml文件:
<set name="students" cascade ="save-update" inverse="true" >
<key column="class_id"></key>
<one-to-many class="Student"/>
</set>
cascade="save-update":操作时的级联关系,在执行save和update时进行级联操作
一般讲cascade配置在one-to-many(one的一方),和one-to-one(主对象一方)
inverse="true":使“多”的一方变为主控方,用在双向关联关系中
column="class_id":指定关联方与本类关联的外键字段
class="Student":关联的目标类
<set>的常用属性如下:
name 映射类属性的名字
lazy 是否采用迟延加载
inverse 标识双向关联中被动的一方,为true时表示控制方为对方
<key>元素是<set>的子元素,必不可少,用于描述两者之间的关联关系
<key>元素的常用属性:
column 父元素所持有的类所对应表的外键字段名
on-delete 外键关联是否打开数据库级别的级联删除,noaction|cascade
not-null 表明外键字段是否可以为空,true|false
update 表明外键是否可以被更新,true|false
unique 表明外键是否有唯一性约束,true|false
Student类文件修改如下:
public class Student {
private Long id;
private String name;
private Integer age;
private Clazz clazz;
private Address address;
}
Student.hbm.xml文件:
<many-to-one name="clazz" class="Clazz“ column="class_id">
</many-to-one>
<one-to-one name="address" class="Address" property-ref="student"></one-to-one>
多对多关联关系:
多对多在这里表示为:many-to-many
实现多对多需要一个中间表
班级Clazz的配置
<set name="teachers" table="class_teacher " cascade=“all“ inverse=“true”>
<key column="class_id"></key>
<many-to-many class="entity.Teacher" column="teacher_id“ />
</set>
教师Teacher的配置
<set name="classes" table="class_teacher ">
<key column="teacher_id"></key>
<many-to-many class="entity.Clazz" column="class_id"/>
</set>
实体对象之间一对一的关联是通过数据库的外键实现的
外键的使用有以下两种方式:
主键关联: 不需要借助额外字段,直接通过两个表的主键来关联,两表中相关联的记录要使用相同的主键值
唯一外键关联 :某个表的外键字段关联到另一个表的主键字段上,是多对一关联的特例
主键关联:
首先需要在Student对象的配置文件中定义到Address对象的关联:
<one-to-one name="address" class="Address" ></one-to-one>
然后需要在Address对象的配置文件中定义到Student对象的关联
<one-to-one name="student" class="Student" cascade="all"></one-to-one>
并修改Address对象配置文件的id元素
<id name="id" column="id">
<generator class="foreign">
<param name="property">student</param>
</generator>
</id>
唯一外键关联:
为每一个Address配给一个Student,形成一对一,address表格通过student_id作为外键参考至student:
Student.hbm.xml文件:
<one-to-one name="address" class="Address" property-ref="student" ></one-to-one>
在<one-to-one>中,property-ref告诉Hibernate,查询出
address 并将其参考至
student 。
Address.hbm.xml文件:
<many-to-one name="student" class="Student" column="student_id"
unique="true" fetch="join" ></many-to-one>
unique="true":使多对一变成一对一
在多的一端加入一个外键,参考一的一端,加载多的一端,一的一端自动加载进来
双向一对多关联关系:
Clazz类文件代码如下:
public class Clazz {
private Long id;
private String Name;
private Set<Student> students = new HashSet<Student>();
}
Clazz.hbm.xml文件:
<set name="students" cascade ="save-update" inverse="true" >
<key column="class_id"></key>
<one-to-many class="Student"/>
</set>
cascade="save-update":操作时的级联关系,在执行save和update时进行级联操作
一般讲cascade配置在one-to-many(one的一方),和one-to-one(主对象一方)
inverse="true":使“多”的一方变为主控方,用在双向关联关系中
column="class_id":指定关联方与本类关联的外键字段
class="Student":关联的目标类
<set>的常用属性如下:
name 映射类属性的名字
lazy 是否采用迟延加载
inverse 标识双向关联中被动的一方,为true时表示控制方为对方
<key>元素是<set>的子元素,必不可少,用于描述两者之间的关联关系
<key>元素的常用属性:
column 父元素所持有的类所对应表的外键字段名
on-delete 外键关联是否打开数据库级别的级联删除,noaction|cascade
not-null 表明外键字段是否可以为空,true|false
update 表明外键是否可以被更新,true|false
unique 表明外键是否有唯一性约束,true|false
Student类文件修改如下:
public class Student {
private Long id;
private String name;
private Integer age;
private Clazz clazz;
private Address address;
}
Student.hbm.xml文件:
<many-to-one name="clazz" class="Clazz“ column="class_id">
</many-to-one>
<one-to-one name="address" class="Address" property-ref="student"></one-to-one>
多对多关联关系:
多对多在这里表示为:many-to-many
实现多对多需要一个中间表
班级Clazz的配置
<set name="teachers" table="class_teacher " cascade=“all“ inverse=“true”>
<key column="class_id"></key>
<many-to-many class="entity.Teacher" column="teacher_id“ />
</set>
教师Teacher的配置
<set name="classes" table="class_teacher ">
<key column="teacher_id"></key>
<many-to-many class="entity.Clazz" column="class_id"/>
</set>
相关文章推荐
- [原创]java WEB学习笔记81:Hibernate学习之路--- 对象关系映射文件(.hbm.xml):hibernate-mapping 节点,class节点,id节点(主键生成策略),property节点,在hibernate 中 java类型 与sql类型之间的对应关系,Java 时间和日期类型的映射,Java 大对象类型 的 映射 (了解),映射组成关系
- Hibernate学习-14:实体之间的关系及其配置,级联操作
- 框架学习之hibernate-02实体与实体之间的关系
- 框架学习之Hibernate 第四节 实体对象的三种状态和saveOrUpdate方法
- Mybatis学习笔记:(二) java中的实体(对象、List、Set)关系怎样与数据库关联映射
- Hibernate框架学习(三)——实体规则、对象状态、一级缓存
- 关于基类与派生类之间对象、指针等转化关系的小结
- Java学习8——类(对象)之间的关系
- JavaWeb学习笔记-Hibernate-05-实体对象与数据库关键词冲突解决方法
- [原创]java WEB学习笔记77:Hibernate学习之路---Hibernate 版本 helloword 与 解析,.环境搭建,hibernate.cfg.xml文件及参数说明,持久化类,对象-关系映射文件.hbm.xml,Hibernate API (Configuration 类,SessionFactory 接口,Session 接口,Transaction(事务))
- Hibernate的学习总结(映射类之间的继承关系)
- Hibernate基于注解方式配置来实现实体和数据库之间存在某种映射关系
- Hibernate学习笔记之ORM实体间关系“OneToOne”详解
- 【HIbernate框架学习】:Hibernate对象关系映射之单向多对多关联映射
- 微软企业库4.1学习笔记(二)各功能之间的依赖关系以及对象创建
- 微软企业库4.1学习笔记(二)各功能之间的依赖关系以及对象创建
- (原创)c#学习笔记08--面向对象编程简介02--OOP技术04--对象之间的关系
- Hibernate基础学习(四)—对象-关系映射(上)
- 【Java EE 学习 45】【Hibernate学习第二天】【对象的三种状态】【一对多关系的操作】
- 【HIbernate框架学习】:Hibernate对象继承关系映射(二)