Hibernate关联关系映射
来源:互联网 发布:常州瑞声科技 知乎 编辑:程序博客网 时间:2024/04/27 01:52
说到关联关系映射,首先我们需要了解一个名词 ORM ,全称是( Object Relational Mapping ),即对象关系映射。 ORM 的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现,这样开发人员就可以把对数据库的操作转化为对这些对象的操作。 Hibernate 正是实现了这种思想,达到了方便开发人员以面向对象的思想来实现对数据库的操作。
映射定义( Mapping declaration ):对象和关系数据库之间的映射通常是用一个 XML 文档来定义的。这个映射文档被设计为易读的,并且可以手工修改。映射语言是以 Java 为中心,这意味着映射文档是按照持久化类的定义来创建的,而非表的定义。
关联关系映射通常情况是最难配置正确的。在这个部分中,我们从单向关系映射开始,然后考虑双向关系映射,逐步讲解典型的案例。在所有的例子中,我们都使将用 Person 和 Address 。我们根据映射关系是否涉及连接表以及多样性( multiplicity )来划分关联类型。在传统的数据建模中,允许为 Null 值的外键被认为是一种不好的实践,因此我们所有的例子中都使用不允许为 Null 的外键。这并不是 Hibernate 的要求,即使你删除掉不允许为 Null 的约束, Hibernate 映射一样可以工作的很好。
表结构
1.多对一( many-to-one )
单向 many-to-one 关联是最常见的单向关联关系。
基于外键关联的单向一对一关联和单向多对一关联几乎是一样的。唯一的不同就是单向一对一关联中的外键字段具有唯一性约束。
基于外键关联的单向一对多关联是一种很少见的情况,不推荐使用它。
1.一对多(one to many)/多对一(many to one)
双向多对一关联 是最常见的关联关系。下面的例子解释了这种标准的父/子关联关系。
2. 一对一(One-to-one)
基于外键关联的双向一对一关联也很常见。
下面是一个双向多对多关联的例子。
映射定义( Mapping declaration ):对象和关系数据库之间的映射通常是用一个 XML 文档来定义的。这个映射文档被设计为易读的,并且可以手工修改。映射语言是以 Java 为中心,这意味着映射文档是按照持久化类的定义来创建的,而非表的定义。
关联关系映射通常情况是最难配置正确的。在这个部分中,我们从单向关系映射开始,然后考虑双向关系映射,逐步讲解典型的案例。在所有的例子中,我们都使将用 Person 和 Address 。我们根据映射关系是否涉及连接表以及多样性( multiplicity )来划分关联类型。在传统的数据建模中,允许为 Null 值的外键被认为是一种不好的实践,因此我们所有的例子中都使用不允许为 Null 的外键。这并不是 Hibernate 的要求,即使你删除掉不允许为 Null 的约束, Hibernate 映射一样可以工作的很好。
表结构
create table Person(personId bigint not null primary key, addressId bigint not null);create table Address(addressId bigint not null primary key);一、单向关联( Unidirectional associations )
1.多对一( many-to-one )
单向 many-to-one 关联是最常见的单向关联关系。
<class name="Person"><id name="id" column="personId"><generator class="native"/></id><many-to-one name="address" column="addressId" not-null="true"/></class><class name="Address"><id name="id" column="addressId"><generator class="native"/></id></class>2.一对一( one-to-one )
基于外键关联的单向一对一关联和单向多对一关联几乎是一样的。唯一的不同就是单向一对一关联中的外键字段具有唯一性约束。
<class name="Person"><id name="id" column="personId"><generator class="native"/></id><many-to-one name="address" column="addressId" unique="true" not-null="true"/></class><class name="Address"><id name="id" column="addressId"><generator class="native"/></id></class>3. 一对多(one-to-many)
基于外键关联的单向一对多关联是一种很少见的情况,不推荐使用它。
<class name="Person"><id name="id" column="personId"><generator class="native" /></id><set name="addresses"><key column="personId" not-null="true" /><one-to-many class="Address" /></set></class><class name="Address"><id name="id" column="addressId"><generator class="native" /></id></class>二、双向关联(Bidirectional associations)
1.一对多(one to many)/多对一(many to one)
双向多对一关联 是最常见的关联关系。下面的例子解释了这种标准的父/子关联关系。
<class name="Person"><id name="id" column="personId"><generator class="native" /></id><many-to-one name="address" column="addressId" not-null="true" /></class><class name="Address"><id name="id" column="addressId"><generator class="native" /></id><set name="people" inverse="true"><key column="addressId" /><one-to-many class="Person" /></set></class>如果你使用 List(或者其他有序集合类),你需要设置外键对应的 key 列为 not null。Hibernate 将从集合端管理关联,维护每个元素的索引,并通过设置 update="false" 和 insert="false" 来对另一端反向操作。
2. 一对一(One-to-one)
基于外键关联的双向一对一关联也很常见。
<class name="Person"><id name="id" column="personId"><generator class="native" /></id><many-to-one name="address" column="addressId" unique="true"not-null="true" /></class><class name="Address"><id name="id" column="addressId"><generator class="native" /></id><one-to-one name="person" property-ref="address" /></class>3. 多对多(many-to-many)
下面是一个双向多对多关联的例子。
create table Person ( personId bigint not null primary key )create table PersonAddress ( personId bigint not null, addressId bigint not null, primary key(personId, addressId) )create table Address ( addressId bigint not null primary key )
<class name="Person"><id name="id" column="personId"><generator class="native" /></id><set name="addresses" table="PersonAddress"><key column="personId" /><many-to-many column="addressId" class="Address" /></set></class><class name="Address"><id name="id" column="addressId"><generator class="native" /></id><set name="people" inverse="true" table="PersonAddress"><key column="addressId" /><many-to-many column="personId" class="Person" /></set></class>
2 0
- hibernate关联关系映射
- Hibernate映射关联关系
- Hibernate关联关系映射
- Hibernate关联关系映射
- hibernate 关联关系映射
- Hibernate关联关系映射
- Hibernate关联关系映射
- hibernate关联关系映射
- hibernate关联关系映射
- Hibernate关联关系映射
- Hibernate 映射关联关系
- Hibernate-关联关系映射
- hibernate映射-关联关系
- Hibernate关联关系映射
- Hibernate关联关系映射
- Hibernate关联关系映射
- hibernate 关联关系映射
- Hibernate的关联关系映射
- Unable to load configuration解决方案
- 分布式图处理引擎Graph Engine 1.0 预览版正式发布
- 瞬时功率理论(3)_matlab仿真验证
- 【java基础Java邮件开发(基本概念介绍 )
- 1220项目摄像头问题记录备注
- Hibernate关联关系映射
- 仿微信头像图片裁剪并压缩到100K以下到本地
- linux系统约定不同类型文件默认的颜色
- android launcher3拖拽事件响应解析长按事件处理
- FTP命令详解
- 裸函数
- Spring注解@Component、@Repository、@Service、@Controller区别
- 化工企业数据分析中心项目之采购模块分析
- VM.SWAPPINESS=0在最新内核中可能会OOM,MYSQL被意外KILL