一.Hibernate映射文件的作用:

Hibernate映射文件是Hibernate与数据库进行持久化的桥梁


二,Hibernate映射文件主要内容:

    (1).映射内容的定义:

Hibernate映射文件由节点定义映射内容并指定所对应的JavaBean的位置(也可以不在该节点中用package属性指定对应的JavaBean位置,而在该节点下的class节点中的name属性中指定)

(2).数据库和JavaBean的关联:

Hibernate映射文件中用<hibernate-mapping>节点下的

( 该节点的父节点中用package属性指定了JavaBean的包名时用)/全路径(该节点的父节点中没用package属性指定JavaBean的包名时用)

(3).主键映射:

在<class >节点下用

节点映射对应的主键,该节点必须有且只有一个(因为主键只有一个),同时必须放在<property ...>节点前

(4).普通字段映射:

在<class ...>节点下用

节点映射普通字段,该节点可有多个(一个字段用一个该节点来映射)

三,heibernate的主键映射方式:

在<id ...>节点下用<generator class="映射方式"/>节点指定Hibernate向数据库插入数据时主键的生成方式

l
assigned:应用程序自身对id赋值。当设置<generator
class="assigned"/>时,应用程序自身需要负责主键id的赋值,id
l
native:由数据库对id赋值。当设置<generator
class="native"/>时,数据库负责主键id的赋值,最常见的是int型的自增型主键。例如,在SQLServer中建立表的id字段为identity,配置了该生成器,程序员就不用为该主键设置值,它会自动设置。

lSQL
Server、MySQL中的自增主键生成机制。

l hilo:通过hi/lo算法实现的主键生成机制,需要额外的数据库表保存主键生成历史状态。

l seqhilo:与hi/lo类似,通过hi/lo算法实现的主键生成机制,只是主键历史状态保存在sequence中,适用于支持sequence的数据库,如Oracle。

l

l
sequence:采用数据库提供的sequence机制生成主键,用于用序列方式产生主键的数据库(如:Oracle、DB2等的Sequence),用于为long/short/int型列生成唯一标识,如:<generator
class="sequence"><param name="sequence">序列名</param></generator>
如Oracle sequence。

l uuid.hex:由Hibernate基于128位唯一值产生算法,根据当前设备IP、时间、JVM启动时间、内部自增量等4个参数生成十六进制数值(编码后长度为32位的字符串表示)作为主键。即使是在多实例并发运行的情况下,这种算法在最大程度上保证了产生id的唯一性。当然,重复的概率在理论上依然存在,只是概率比较小。一般而言,利用uuid.hex方式生成主键将提供最好的数据插入性能和数据平台适应性。

l uuid.string:与uuid.hex类似,只是对生成的主键进行编码(长度为16位)。在某些数据库中可能出现问题。

l

l select:Hibernate 3新引入的主键生成机制,主要针对遗留系统的改造工程。

由于常用的数据库,如SQLServer、MySQL等,都提供了易用的主键生成机制(如auto-increase字段),可以在数据库提供的主键生成机制上,采用native生成器来配置主键生成方式。

四,映射文件的元素结构和属性

  1,根元素:<hibernate-mapping>,每一个hbm.xml文件都有唯一的一个根元素,包含一些可选的属性

  1. <hibernate-mapping package="com.demo.hibernate.beans">
  2. <class name="User" ...>
  3. </hibernate-mapping>
  4. <hibernate-mapping>
  5. <class name="com.demo.hibernate.beans.User" ...>
  6. </hibernate-mapping>

(2).schema: 指定当前映射文件对应的数据库表的schema名
      (3).catalog: 指定当前映射文件对应的数据库表的catalog名
      (4).default-cascade: 设置默认的级联方式(默认值为none)
      (5).default-access: 设置默认的属性访问方式(默认值为property)
      (6).default-lazy: 设置对没有指定延迟加载的映射类和集合设定为延迟加载(默认值为true)
      (7).auto-import: 设置当前映射文件中是否可以在HQL中使用非完整的类名(默认值为true)

hibernate-mapping节点的字节点:
     (1).class: 为当前映射文件指定对应的持久类名和对应的数据库表名
     (2).subclass: 指定多态持久化操作时当前映射文件对应的持久类的子类
     (3).meta: 设置类或属性的元数据属性
     (4).typedef: 设置新的Hibernate数据类型
     (5).joined-subclass: 指定当前联结的子类
     (6).union-subclass: 指定当前联结的子类
     (7).query: 定义一个HQL查询
     (8).sql-query: 定义一个SQL查询
     (9).filter-def: 指定过滤器

2,<class>定义类:根元素的子元素,用以定义一个持久化类与数据表的映射关系,如下是该元素包含的一些可选的属性

(1).name: 为当前映射文件指定对应的持久类名
        (3).schema: 设置当前指定的持久类对应的数据库表的schema名
         (4).catalog: 设置当前指定的持久类对应的数据库表的catalog名
         (5).lazy: 设置是否使用延迟加载
         (7).check: 指定一个SQL语句用于Schema前的条件检查
         (8).where: 指定一个附加的SQL语句的where条件
         (9).rowid: 指定是否支持ROWID
         (10).entity-name:实体名称 默认值为类名
         (11).subselect: 将不可变的只读实体映射到数据库的子查询中
         (12).dynamic-update: 指定用于update的SQL语句是否动态生成 默认值为false
         (13).dynamic-insert: 指定用于insert的SQL语句是否动态生成 默认值为false
         (14).insert-before-update: 设定在Hibernate执行update之前是否通过select语句来确定对象是否确实被修改了,如果该对象的值没有改变,update语句将不会被执行(默认值为false)
         (15).abstract: 用于在联合子类中标识抽象的超类(默认值为false)
         (16).emutable: 表明该类的实例是否是可变的 默认值为fals
         (17).proxy: 指定延迟加载代理类
         (18).polymorphism: 指定使用多态查询的方式 默认值为implicit
         (19).persister: 指定一个Persister类
         (20).discriminator-value: 子类识别标识 默认值为类名
         (21).optimistic-lock: 指定乐观锁定的策略 默认值为vesion
class节点的字节点:
     (1).id: 定义当前映射文件对应的持久类的主键属性和数据表中主键字段的相关信息
     (2).property: 定义当前映射文件对应的持久类的属性和数据表中字段的相关信息
     (3).sql-insert: 使用定制的SQL语句执行insert操作
     (4).sql-delete: 使用定制的SQL语句执行delete操作
     (5).sql-update: 使用定制的SQL语句执行update操作
     (6).subselect: 定义一个子查询
     (7).comment: 定义表的注释
     (8).composite-id: 持久类与数据库表对应的联合主键
     (9).many-to-one: 定义对象间的多对一的关联关系
     (10).one-to-one: 定义对象间的一对一的关联关系
     (11).any: 定义any映射类型
     (12).map: map类型的集合映射
     (13).set: set类型的集合映射
     (14).list: list类型的集合映射
     (15).array: array类型的集合映射
     (16).bag: bag类型的集合映射
     (17).primitive-array: primitive-array类型的集合映射
     (18).query: 定义装载实体的HQL语句
     (19).sql-query: 定义装载实体的SQL语句
     (20).synchronize: 定义持久化类所需要的同步资源
     (21).query-list: 映射由查询返回的集合
     (22).natural-id: 声明一个唯一的业务主键
     (23).join: 将一个类的属性映射到多张表中
     (24).sub-class: 声明多态映射中的子类
     (25).joined-subclass: 生命多态映射中的来连接子类
     (26).union-subclass: 声明多态映射中的联合子类
     (27).loader: 定义持久化对象的加载器
     (28).filter: 定义Hibernate使用的过滤器
     (29).component: 定义组件映射
     (30).dynamic-component: 定义动态组件映射
     (31).properties: 定义一个包含多个属性的逻辑分组
     (32).cache: 定义缓存的策略
     (33).discriminator: 定义一个鉴别器
     (34).meta: 设置类或属性的元数据属性
     (35).timestamp: 指定表中包含时间戳的数据
     (36).vesion: 指定表所包含的附带版本信息的数据

4,<id>定义主键:

Hibernate使用OID(对象标识符)来标识对象的唯一性,OID是关系数据库中主键在Java对象模型中的等价物,在运行时,Hibernate根据OID来维持Java对象和数据库表中记录的对应关系

id节点的属性:
     (1).name: 指定当前映射对应的持久类的主键名
     (2).column: 指定当前映射对应的数据库表中的主键名(默认值为对应持久类的主键/属性名)
     (3).type: 指定当前映射对应的数据库表中的主键的数据类型
     (4).unsaved-value: 判断此对象是否进行了保存
     (5).daccess: Hibernate访问主键属性的策略(默认值为property)

5.generator节点的属性:
     (1).class: 指定主键生成器
     (2).name: 指定当前映射对应的持久类的主键名
     (3).column: 指定当前映射对应的数据库表中的主键名(默认值为对应持久类中的主键名)
     (4).type: 指定当前映射对应的数据库中主键的数据类型
     (5)not-null: 设置该字段的值是否可以为null(默认值为false)
     (7).update: 设置update操作时是否包含本字段的数据(默认值为true)
     (8).insert: 设置insert操作时是否包含本字段的数据(默认值为true)
     (9).formula: 设置查询操作时该属性的值用指定的SQL来计算
     (10).access: Hibernate访问这个属性的策略(默认值为property)
     (11).lazy: 设置该字段是否采用延迟加载策略(默认值为false)
     (12).optimistic-lock: 指定此属性做更新操作时是否需要乐观锁定(默认值为true)

6.property节点的属性: 
     用于持久化类的属性与数据库表字段之间的映射,包含如下属性:

(1)name:持久化类的属性名,以小写字母开头
      (2)column:数据库表的字段名
      (3)type:Hibernate映射类型的名字

(4).formula: 设置当前节点对应的持久类中的属性的值由指定的SQL从数据库获取
注:指定的SQL必须用()括起来,指定SQL中使用列时必须用表的别名加.加列名的方式访问,但如果指定SQL中要使用当前映射对应的列时不能用表的别名加.加列名的方式访问,而是直接访问即可
  如:formula="(select tn.columnName from tableName tn where tn.columnName=当前映射中的属性名)"
     (5).unique: 设置该字段的值是否唯一(默认值为false)
     (6).not-null: 设置该字段的值是否可以为null(默认值为false)
     (7).not-found: 设置当当前节点对应的数据库字段为外键时引用的数据不存在时如何让处理(默认值为exception:产生异常,可选值为ignore:对不存在的应用关联到null)
     (8).property-ref: 设置关联类的属性名,此属性和本类的关联相对应 默认值为关联类的主键
     (9).entity-name: 被关联类的实体名
     (10).lazy: 指定是否采用延迟加载及加载策略(默认值为proxy:通过代理进行关联,可选值为true:此对象采用延迟加载并在变量第一次被访问时抓取、false:此关联对象不采用延迟加载)
     (11).access: Hibernate访问这个属性的策略(默认值为property)
     (12).optimistic-lock: 指定此属性做更新操作时是否需要乐观锁定(默认值为true)

7.one-to-one节点的属性:
     (1).name: 映射类属性的名字
     (2).class: 关联类的名字
     (3).formula: 绝大多数一对一关联都指向其实体的主键。在某些情况下会指向一个或多个字段或是一个表达式,此时可用一个SQL公式来表示
     (4).cascade: 设置级联操作时的级联类型
     (5).constrained: 表明当前类对应的表与被关联的表之间是否存在着外键约束 默认值为false
     (6).fetch: 设置抓取数据的策略 可选值为 join外连接抓取、select序列选择抓取
     (7).property-ref: 设置关联类的属性名,此属性和本类的主键相对应 默认值为关联类的主键
     (8).access: Hibernate访问这个属性的策略(默认值为property)
     (9).lazy: 指定是否采用延迟加载及加载策略 默认值为proxy通过代理进行关联 可选值为 true此对象采用延迟加载并在变量第一次被访问时抓取、false此关联对象不采用延迟加载
     (10).entity-name: 被关联类的实体名

8.many-to-one 元素:
     (1).name: 映射类属性的名字
     (2).class: 关联类的名字
     (3).formula: 绝大多数一对一关联都指向其实体的主键。在某些情况下会指向一个或多个字段或是一个表达式,此时可用一个SQL公式来表示
     (4).column: 中间关联表映射到目标关联表的关联字段
     (5).cascade: 设置级联操作时的级联类型
     (6).fetch: 设置抓取数据的策略 默认值为select序列选择抓取 可选值为join外连接抓取
     (7).lazy: 指定是否采用延迟加载及加载策略 默认值为proxy通过代理进行关联 可选值为 true此对象采用延迟加载并在变量第一次被访问时抓取、false此关联对象不采用延迟加载
     (8).update: 进行update操作时是否包含此字段
     (9).insert: 进行insert操作时是否包含此字段
     (10).not-found: 指定外键引用的数据不存在时如何让处理 默认值为exception产生异常 可选值为ignore对不存在的应用关联到null

9.many-to-many 元素
10.set 元素
      (1).name: 映射类属性的名字
      (2).table: 关联的目标数据库表
      (3).schema: 目标数据库表的schema名字
      (4).catalog: 目标数据库表的catalog名字
      (5).subselect: 定义一个子查询
      (6).sort: 设置排序的类型 默认值为 unsorted不排序 可选值为 natural自然排序、comparatorClass实现接口类作为排序算法 避免与order-by同时使用
      (7).lazy: 是否采用延迟加载
      (8).inverse: 用于标识双向关联中被动的一方 默认值为false
      (9).cascade: 设置级联操作时的级联类型
      (10).mutable: 标识被关联对象是否可以改变 默认值为true
      (11).order-by: 设置排序规则
      (12).where: 增加筛选条件
      (13).batch-size: 延迟加载时,一次读取数据的数量 默认值为1
      (14).fetch: 设置抓取数据的策略 可选值为 join外连接抓取、select序列选择抓取
   11.list 元素
   12.map 元素

【转】hibernate中的映射文件xxx.hbm.xml详解总结的更多相关文章

  1. hibernate中的映射文件xxx.hbm.xml详解总结

    转自 http://blog.csdn.net/a9529lty/article/details/6454924 一.hibernate映射文件的作用: Hibernate映射文件是Hibernate ...

  2. Hibernate注解----关联映射注解以及课程总结详解----图片版本

    上一篇,记录了Hibernate注解----类级别注解以及属性注解详解 ,我们这一节主要讲解的是Hibernate注解----关联映射注解以及课程总结详解. 本节的主要内容: 第3章 关联映射注解 3 ...

  3. Hibernate映射文件配置(hbm.xml和注解方式)

    一:通过*.hbm.xml配置实体的实现方式 mappingResources用于指定少量的hibernate配置文件像这样 Xml代码  <property name="mappin ...

  4. hibernate笔记--实体类映射文件"*.hbm.xml"详解

    实体类就是指普通的POJO,Hibernate并不知道那个实体类对应数据库的哪一张表,所以还需要配置一下,常用的方式就是*.hbm.xml文件[配置与@注解配置,这里介绍前者的详细属性: <?x ...

  5. 【转】hibernate.hbm.xml详解

    在Hibernate中,各表的映射文件….hbm.xml可以通过工具生成,例如在使用MyEclipse开发时,它提供了自动生成映射文件的工具.配置文件的基本结构如下: Xml代码 <?xmlve ...

  6. Hibernate中一级缓存和二级缓存使用详解

    一.一级缓存二级缓存的概念解释 (1)一级缓存就是Session级别的缓存,一个Session做了一个查询操作,它会把这个操作的结果放在一级缓存中,如果短时间内这个 session(一定要同一个ses ...

  7. hbm.xml 详解总结

    转自 http://blog.csdn.net/tuke_tuke/article/details/49717991 一.hibernate映射文件的作用: Hibernate映射文件是Hiberna ...

  8. Hibernate3.5.4---java application的xml和annotation环境搭建(hibernate.cfg.xml配置文件说明,映射文件Student.hbm.xml说明

    http://blog.csdn.net/centre10/article/details/6050466 来自于:http://blog.csdn.net/centre10/article/deta ...

  9. 【转】关系映射文件***.hbm.xml详解

    http://blog.sina.com.cn/s/blog_7ffb8dd5010144yo.html 附.Oracle使用标准.可变长度的内部格式来存储数字.这个内部格式精度可以高达38位. NU ...

随机推荐

  1. VIM-不常用或不知道的技巧

    cc 清除一行 并在本行编辑, 同理 cw :32,65d 多行删除 g/pattern/d 删除包含特定字符的行 v/pattern/d 删除不包含指定字符的行 等同于 g!/pattern/d y ...

  2. 采用CDN加速后,如何在程序里获取用户IP地址

    现在很多网站用了CDN技术,但采用CDN技术后,原来用来获取访问源的IP地址的程序已不能正常使用,它拿到的并不是访问源的真实IP地址,而是CDN节点的IP地址,解决方法是对获取IP的代码作一点小改动. ...

  3. C#实现svn server端的hook

    目标 要做的东东呢,就是在向svn提交文件的时候,可以再server端读到所有提交文件的内容,并根据某些规则验证文件的合法性,如果验证失败,则终止提交,并在svn的客户端上显示错误信息. 准备工作   ...

  4. jQuery中事件绑定

    一.前言 最近在做项目中要用到jQuery来绑定事件,首先想到的是$(selector).事件名();这样绑定事件的方式,这种方式对事件进行绑定其实也就是bind()方法,但当选择器匹配的元素过多,$ ...

  5. Atitit.播放系统规划新版本 and 最近版本回顾 v3  pbf.doc

    Atitit.播放系统规划新版本 and 最近版本回顾 v3  pbf.doc 1 版本11 (ing)4 1.1 规划h5本地缓存系列 4 1.2 Android版本app4 1.3 双类别系统, ...

  6. Atitit. visual studio vs2003 vs2005 vs2008  VS2010 vs2012 vs2015新特性 新功能.doc

    Atitit. visual studio vs2003 vs2005 vs2008  VS2010 vs2012 vs2015新特性 新功能.doc 1.1. Visual Studio2 1.2. ...

  7. C++ Primer(第五版)读书笔记 & 习题解答 --- Chapter 3

    Chapter 3.1 1. using声明具有如下的形式: using namespace::name; Chapter 3.2 1. C++标准一方面对库类型所提供的操作做了规定,另一方面也对库的 ...

  8. 创建oracle本地数据库步骤详解

    前提:安装好oracle数据库客户端: PL/SQL DEVELOPER 1.打开DatabaseConfiguration Assistant,如图: 选择创建数据库->next->选择 ...

  9. 谁是云的王者?OpenStack与VMware优劣对比

    [编者按]在云计算生态系统中,有两种类型的用户需要使用云计算资源:传统型(Traditional IT applications)和在互联网大潮下逐渐崛起云计算应用型(Cloud-aware appl ...

  10. Java基础04 封装与接口(转载)

    数据成员和方法都是同时开放给内部和外部的.在对象内部,我们利用this来调用对象的数据成员和方法.在对象外部,比如当我们在另一个类中调用对象的时,可以使用 对象.数据成员 和 对象.方法() 来调用对 ...