`
yuanyao
  • 浏览: 144741 次
  • 性别: Icon_minigender_1
  • 来自: 就那小山沟
社区版块
存档分类
最新评论

Hibernate的映射机制

阅读更多
Hibernate的主键映射


关系数据库中依靠主键来区分不同的记录,主键又有自然与代理主键之分。

所谓主键就是充当主键的字段本身具有一定的含义,是构成记录的组成部分。比如说学生的学号,除了充当主键之外,同时也是学生记录的主要组成部分。
所谓代理主键就是充当主键的字段本身不具有业务含义,只起主键的作用,比如自动增长类型的ID号等。

在Hibernate应用中,Hibernate依靠对象标识符(OID)来区分不同的持久化对象。而OID则可以通过Hibernate内置的标识生成器来产生。
Hibernate常用的标识生成器
Assigned       OID由业务逻辑程序负责产生,Hibernate只是负责持久   化,常用于映射自然主键
Hilo   OID由Hibernate按照high/low算法产生,该算法需要从   数据库的某个表的字段中读取high值
Increment   OID由Hibernate依递增方式产生,该算法依赖保存于当   前应用实例中的一个最大值变量,当有多个应用实例需要   访问数据库时难免出现重复的主键,应当谨慎使用
Identity   OID由底层数据库的自增主键生成机制产生,如MySQL   的auto_increment类型主键与SQL Server的identity类型   主键
Sequence       OID由底层数据库的sequence主键生成机制产生,如   Oracle sequence
Native   根据底层数据库对自动生成OID能力的支持情况,具体   选择identity sequence hilo 生成器产生OID,常用与跨平   台


Hibernate的实体映射

Hibernate实体映射的主要任务就是实现数据库关系表与持久化类之间的映射,


持久化类--》ORM映射文件--》数据库表

映射一对一关联关系

Hibernate有两种映射实体一对一关联关系的实现方式:共享主键方式和唯一外键方式.
所谓共享主键方式就是限制两个数据表的主键使用相同的值,通过主键形成一对一的映射关系.
所谓唯一主键就是一个表的外键和另一个表的唯一主键对应形成一对一映射关系.这种一对一的关系其实就是多对一关联关系的一种特殊情况而已.


映射多对一单向关联关系

实体之间的多对一单向关联关系是一中常见的关联关系,比如说Client和Orders,在购物的时候,Client可以有多个Oriders,但是每个Oriders必须有唯一一个Client.
在Orders.hbm.xml中,用<many-to-one />来描述被关联的类.
<many-to-one name="customer"
	        			    column="CUSTOMER_ID"
	        	    class="com.ORM.Customer"/>

在Orders.java中,添加Customer的get和set方法.


映射一对多双向关联关系

在应用中(如上的例子),会有这样的需求:根据给定的Client,要得到Client的ALL Orders;根据给定的Order,得到该Order所属的Client.一对多单向和一对多双向在数据库中的表现方式一样,均通过外键来实现.
在多对一单向关联关系的基础上,在Customer.hbm.xml中,用<set>来描述被关联的类.
 <set name="orders"
	        	 cascade="all"
	        	 inverse="true"
	        	 lazy="false"
	        	 >
	<one-to-many class="com.ORM.Customer">
	</set>



映射多对多单向关联关系

多对多的关系非常的普遍,如,Orders和Items,Items和Cart之间的关系均属于多对多的关系.多对多的关系在数据库中不能直接实现,还必须依赖一张连接表来保存这种关联关系.


映射多对多双向关联关系

多对多的双向关联关系就是实现两个互逆的多对多单向关联关系.

映射组成关系

在Hibernate应用开发中,为了提高代码的可重用性,往往需要将一个较大的持久化类分解成两个较小的持久化类,且其中的一个持久化类是另一个持久化类的组成部分.
例如:一个Clients类,为了提高代码的可重用性,将省份,城市,街道住处及邮编单独设计成一个持久化类Address,Address的实例充当Clients的属性.这就是典型的组成关系.
映射Clients与Address之间的组成关系
<component name="address"
	 			   Class="com.ORM.Address">
	<parent name="client" />
	<property name="province" column="PROVINCE" type="string" />
	<property name="city" column="CITY" type="string" />
	<property name="street" column="STREET" type="string" />
	<property name="zipcode" column="ZIPCODE" type="string" />
	</component>



映射继承关系
在面向对象的程序设计方法中,继承关系是一种非常普遍的关系,然而在关系型数据库中表与表之间不能直接实现这种继承关系.为了将持久化类之间的继承关系映射到数据库中,可以采用为每个具体持久化类(子类)对应一个关系表的映射方法.

Hibernate的集合映射
为了解决不同的需求,JAVA提供了3种类型的集合类,当集合中的对象不需要排序且不存在重复对象时,可选Set类;当集合中可以存在重复对象且需要按索引位置存取时就选用List类;当集合中需要使用键值存取对象时则选用Map类.
分享到:
评论

相关推荐

    hibernate映射机制

    hibernate映射文件让你更自如的装换java中数据类型到数据库中数据类型,实现hibernate的映射,方便编码,节省应为数据类型带来的麻烦。

    javaee实验五 大学本科生 hibernate

    2、 观察持久化类与数据库表的映射关系,观察相应的 Hibernate 映射文件 (.hbm.xml)配置,并能够做简单应用; 3、 观察 Hibernate 配置文件(hibernate.cfg.xml)中的主要元素及属性配置,并能够做简单应用。

    hibernate关系映射1to1及Nto1

    hibernate关系映射系列1,单向1对1映射,意向Nto1 程序说明:生成mysql数据库,建立DB Browser连接后,用户可在程序中自动生成mysql表,非常简单,适合初学者了解hibernate映射机制,有问题可联系flyallen5@hotmail.com

    hibernate继承关系映射和java反射机制的运用

    hibernate继承关系映射和java反射机制的运用

    彻底解决hibernate常见难点.zip

    Hibernate处理1-N关系时保存技巧、Hibernate缓存机制、Hibernate批量处理数据、Hibernate三种继承映射策略、hibernate映射体系、Hibernate主键生成策略、持久层DAO设计建议、基于xml文件的bean、使用HibernateAPI在...

    Hibernate框架 jar 架包 开发详解

    Hibernate 简介 Hibernate 开发流程 Hibernate 配置文件 Hibernate 核心接口和类 Hibernate ORM映射 HQL Hibernate 懒加载机制与抓取策略 Hibernate 缓存 Hibernate 锁机制

    hibernate一对多映射的例子

    这个例子会让你很快懂得hibernate一对多的映射机制,你看了以后会有很大的感触!

    深入浅出Hibernate中文版 part1

    第7章 常用Hibernate映射配置说明 7.1 hibernate-mapping节点 7.2 class节点定义 7.3 id节点定义 7.4 属性/字段映射配置 第8章 Hibernate工具 8.1 准备工作 8.2 根据数据库定义生成映射文件——MiddleGen ...

    Hibernate_Annotation关联映射

    Hibernate Annotation几种关联映射 一对一(One-To-One) 使用@OneToOne注解建立实体Bean之间的一对一关联。一对一关联有三种情况:(1).关联的实体都共享同样的主键,(2).其中一个实体通过外键关联到另一个实体的主键...

    Hibernate学习笔记和资料

    hibernate概述,hibernate入门Demo,hibernate配置文件详解(全局配置,实体类映射配置),配置实体规则,核心API详解(Configuration,sessionFactory,session,Transaction),hibernate中的对象状态以及刷新能缓存机制 ...

    hibernate3源码

    Hibernate是一种Java语言下的对象...Hibernate不仅负责从Java类到数据库表的映射(还包括从Java数据类型到SQL数据类型的映射),还提供了面向对象的数据查询检索机制,从而极大地缩短的手动处理SQL和JDBC上的开发时间。

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     2.4.3 Hibernate映射类型接口  2.4.4 可供扩展的接口  2.5 小结  2.6 思考题 第3章 第一个Hibernate应用  3.1 创建Hibernate的配置文件  3.2 创建持久化类  3.3 创建数据库Schema  3.4 创建对象-关系映射...

    Hibernate数据持久层框架是一种Java语言下的对象关系映射解决方案.rar

    Hibernate 是一种Java语言下的...Hibernate不仅负责从Java类到数据库表的映射(还包括从Java数据类型到SQL数据类型的映射),还提供了面向对象的数据查询检索机制,从而极大地缩短的手动处理SQL和JDBC上的开发时间。

    Hibernate+中文文档

    3.4.6. Hibernate的统计(statistics)机制 3.5. 日志 3.6. 实现NamingStrategy 3.7. XML配置文件 3.8. J2EE应用程序服务器的集成 3.8.1. 事务策略配置 3.8.2. JNDI绑定的SessionFactory 3.8.3. 在JTA环境下...

    深入浅出Hibernate中文版 part2

    第7章 常用Hibernate映射配置说明 7.1 hibernate-mapping节点 7.2 class节点定义 7.3 id节点定义 7.4 属性/字段映射配置 第8章 Hibernate工具 8.1 准备工作 8.2 根据数据库定义生成映射文件——MiddleGen ...

    hibernate3.2中文文档(chm格式)

    3.4.6. Hibernate的统计(statistics)机制 3.5. 日志 3.6. 实现NamingStrategy 3.7. XML配置文件 3.8. J2EE应用程序服务器的集成 3.8.1. 事务策略配置 3.8.2. JNDI绑定的SessionFactory 3.8.3. 在JTA环境下...

    HibernateAPI中文版.chm

    3.4.6. Hibernate的统计(statistics)机制 3.5. 日志 3.6. 实现NamingStrategy 3.7. XML配置文件 3.8. J2EE应用程序服务器的集成 3.8.1. 事务策略配置 3.8.2. JNDI绑定的SessionFactory 3.8.3. 在JTA环境下...

    MyEclipse中hibernate的配置

    Hibernate是ORM(Object/Relation Mapping,对象关系映射)机制的最典型技术代表。 好了,下面列出在MyEclipse8.5中配置最基本的Hibernate的过程: 1,工具栏File-&gt;new-&gt;Java Project-&gt;工程命名,我这里是...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part4

     2.4.3 Hibernate映射类型接口  2.4.4 可供扩展的接口  2.5 小结  2.6 思考题 第3章 第一个Hibernate应用  3.1 创建Hibernate的配置文件  3.2 创建持久化类  3.3 创建数据库Schema  3.4 创建对象-关系映射...

Global site tag (gtag.js) - Google Analytics