【转载】Hibernate映射文件详解
转自:http://blog.163.com/hzd_love/blog/static/13199988120108265317988/
Hibernate的持久化类和关系数据库之间的映射通常是用一个XML文档来定义的。该文档通过一系列XML元素的配置,来将持久化类与数据库表之间建立起一一映射。这意味着映射文档是按照持久化类的定义来创建的,而不是表的定义。
一、根元素:<hibernate-mapping>,每一个hbm.xml文件都有唯一的一个根元素,包含一些可选的属性
1)package:指定一个包前缀,如果在映射文档中没有指定全限定的类名,就使用这个作为包名,如
<hibernate-mapping package="com.demo.hibernate.beans">
<class name="User" ...>
</hibernate-mapping>
<hibernate-mapping>
<class name="com.demo.hibernate.beans.User" ...>
</hibernate-mapping>
2)schema:数据库schema的名称
3)catalog:数据库catalog的名称
4)default-cascade:默认的级联风格,默认为none
5)default-access:Hibernate用来访问属性的策略
6)default-lazy:指定了未明确注明lazy属性的Java属性和集合类,Hibernate会采取什么样的默认加载风格,默认为true
7)auto-import:指定我们是否可以在查询语言中使用非全限定的类名,默认为true,如果项目中有两个同名的持久化类,则最好在这两个类的对应的映射文件中配置为false
二、<class>定义类:根元素的子元素,用以定义一个持久化类与数据表的映射关系,如下是该元素包含的一些可选的属性
1)name:持久化类(或者接口)的Java全限定名,如果这个属性不存在,则Hibernate将假定这是一个非POJO的实体映射
2)table:对应数据库表名
3)discriminator-value:默认和类名一样,一个用于区分不同的子类的值,在多态行为时使用
4)mutable:表明该类的实例是可变的或者是不可变的
5)schema:覆盖根元素<hibernate-mapping>中指定的schema名字
6)catalog:覆盖根元素<hibernate-mapping>中指定的catalog名字
7)proxy:指定一个接口,在延迟装载时作为代理使用
8)dynamic-update:指定用于UPDATE的SQL将会在运行时动态生成,并且只更新那些改变过的字段
9)dynamic-insert:指定用于INSERT的SQL将会在执行时动态生成,并且只包含那些非空值字段
10)select-before-update:指定HIbernate除非确定对象真正被修改了(如果该值为true),否则不会执行SQL UPDATE操作。在特定场合(实际上,它只在一个瞬时对象关联到一个新的Session中时执行的update()中生效),这说明Hibernate会在UPDATE之前执行一次额外的SQL SELECT操作,来决定是否应该执行UPDATE
11)polymorphism:多态,界定是隐式还是显式的多态查询
12)where:指定定个附加的SQLWHERE条件,在抓取这个类的对象时会增加这个条件
13)persister:指定一个定制的ClassPersister
14)batch-size:指定一个用于根据标识符(identifier)抓取实例时使用的'batch size'(批次抓取数量)
15)optimistic-lock:乐观锁定,决定乐观锁定的策略
16)lazy:通过设置lazy="false",所有的延迟加载(Lazy fetching)功能将未被激活(disabled)
17)entity-name
18)check:这是一个SQL表达式,用于为自动生成的schema添加多行(multi-row)约束检查
19)rowid
20)subselect
21)abstract:用于在<union-subclass>的继承结构(hierarchies)中标识抽象超类
三、<id>定义主键:Hibernate使用OID(对象标识符)来标识对象的唯一性,OID是关系数据库中主键在Java对象模型中的等价物,在运行时,Hibernate根据OID来维持Java对象和数据库表中记录的对应关系
1)name:持久化类的标识属性的名字
2)type:标识Hibernate类型的名字
3)column:数据库表的主键这段的名字
4)unsaved-value:用来标志该实例是刚刚创建的,尚未保存。可以用来区分对象的状态
5)access:Hibernate用来访问属性值的策略
如果表使用联合主键,那么你可以映射类的多个属性为标识符属性。<composite-id>元素接受<key-property>属性映射和<key-many-to-one>属性映射作为子元素:
以下定义了两个字段作为联合主键:
<composite-id>
<key-property name="username" />
<key-property name="password" />
</composite-id>
四、<generator>设置主键生成方式
该元素的作用是指定主键的生成器,通过一个class属性指定生成器对应的类。(通常与<id>元素结合使用)
<id name="id" column="ID" type="integer">
<generator class="native" />--native是Hibernate主键生成器的实现算法之一,由Hibernate根据底层数据库自行判断采用identity、hilo、sequence其中一种作为主键生成方式。
</id>
Hibernate提供的内置生成器:
1)assigned算法
2)hilo算法
3)seqhilo算法
4)increment算法
5)identity算法
6)sequence算法
7)native算法
8)uuid.hex算法
9)uuid.string算法
10)foregin算法
11)select算法
五、<property>定义属性
用于持久化类的属性与数据库表字段之间的映射,包含如下属性:
1)name:持久化类的属性名,以小写字母开头
2)column:数据库表的字段名
3)type:Hibernate映射类型的名字
4)update:表明用于UPDATE的SQL语句中是否包含这个被映射的字段,默认为true
5)insert:表明用于INSERT的SQL语句中是否包含这个被映射是否包含这个被映射的字段,默认为true
6)formula:一个SQL表达式,定义了这个计算属性的值
7)access:Hibernate用来访问属性值的策略
8)lazy:指定实例变量第一次被访问时,这个属性是否延迟抓取,默认为false
9)unique:使用DDL为该字段添加唯一的约束,此外,这也可以用做property-ref的目标属性
10)not-null:使用DDL为该字段添加可否为空的约束
11)optimistic-lock:指定这个属性在进行更新时是否需要获得乐观锁定(换句话说,它决定这个属性发生脏数据时版本version的值是否增长)
access属性用来让你控制Hibernate如何在运行时访问属性。默认情况下,Hibernate会使用属性的get/set方法对。如果你指明access="field",则Hibernate会忽略get/set方法对,直接使用反射来访问成员变量。
formula属性是个特别强大的的特征。这些属性应该定义为只读,属性值在装载时计算生成。用一个SQL表达式生成计算的结果,它会在这个实例转载时翻译成一个SQL查询的SELECT子查询语句。如:
<property name="totalPrice" formula="(SELECT SUM(*) FROM user)" />
【转载】Hibernate映射文件详解的更多相关文章
- Hibernate映射文件详解(News***.hbm.xml)一
Hibernate是一个彻底的ORM(Object Relational Mapping,对象关系映射)开源框架. 我们先看一下官方文档所给出的,Hibernate 体系结构的高层视图: 其中PO=P ...
- Hibernate映射文件详解(News***.hbm.xml)二
转自 http://blog.csdn.net/a9529lty/article/details/6454924 一.hibernate映射文件的作用: Hibernate映射文件是Hibernate ...
- Hibernate配置文件和映射文件详解
Hibernate是一个彻底的ORM(Object Relational Mapping,对象关系映射)开源框架. 我们先看一下官方文档所给出的,Hibernate 体系结构的高层视图: 其中PO=P ...
- Mybatis SQL映射文件详解
Mybatis SQL映射文件详解 mybatis除了有全局配置文件,还有映射文件,在映射文件中可以编写以下的顶级元素标签: cache – 该命名空间的缓存配置. cache-ref – 引用其它命 ...
- MyBatis 映射文件详解(六)
MyBatis 配置文件类型 MyBatis配置文件有两种类型,如下: 全局配置文件(如 mybatis-config.xml) Mapper XML 映射文件(如 UserMapper.xml) 上 ...
- hibernate多对多映射文件详解(一)
1.仓库表属性 public class WarehouseNew implements java.io.Serializable { // Fields private static final l ...
- Mybatis学习(三)————— 映射文件详解
前面说了全局配置文件中内容的详解,大家应该清楚了,现在来说说这映射文件,这章就对输入映射.输出映射.动态sql这几个知识点进行说明,其中高级映射(一对一,一对多,多对多映射)在下一章进行说明. 一.输 ...
- Mybatis(三) 映射文件详解
前面说了全局配置文件中内容的详解,大家应该清楚了,现在来说说这映射文件,这章就对输入映射.输出映射.动态sql这几个知识点进行说明,其中高级映射(一对一,一对多,多对多映射)在下一章进行说明. 一.输 ...
- MyBatis的SQL语句映射文件详解
SQL 映射XML 文件是所有sql语句放置的地方.需要定义一个workspace,一般定义为对应的接口类的路径.写好SQL语句映射文件后,需要在MyBAtis配置文件mappers标签中引用 < ...
随机推荐
- Qt读写文件
1.头文件 #include<QFile> #include<QFileDialog> #include<QDataStream> 2.写代码前工作 在ui界面拖入 ...
- 【sklearn朴素贝叶斯算法】高斯分布/多项式/伯努利贝叶斯算法以及代码实例
朴素贝叶斯 朴素贝叶斯方法是一组基于贝叶斯定理的监督学习算法,其"朴素"假设是:给定类别变量的每一对特征之间条件独立.贝叶斯定理描述了如下关系: 给定类别变量\(y\)以及属性值向 ...
- C++析构、拷贝、赋值、移动拷贝函数的几个知识点(不全)
怕忘了,写这:析构函数不会释放指针成员指向的对象. 众所周知,C++的类如果没有默认构造函数,会自动生成一个. 同理,如果没有复制构造函数即A::A(const A&){}这个函数 ,则系统也 ...
- JS 数组常见操作汇总,数组去重、降维、排序、多数组合并实现思路整理
壹 ❀ 引 JavaScript开发中数组加工极为常见,其次在面试中被问及的概率也特别高,一直想整理一篇关于数组常见操作的文章,本文也算了却心愿了. 说在前面,文中的实现并非最佳,实现虽然有很多种,但 ...
- java Graphics2D绘制文字 本地正常服务器乱码问题
先贴关键代码: 用Graphics2D画文字到图片,再生成图片文件,在本地运行正常,一部署到服务器就不正常,变成了正方框如下图 解决问题思路: 1.部署服务器的编码问题. 2.代码问题. 以上两点一直 ...
- C#实例之简单聊天室(状态管理)
前言 状态管理是在同一页或不同页的多个请求发生时,维护状态和页信息的过程.因为Web应用程序的通信协议使用了无状态的HTTP协议,所以当客户端请求页面时,ASP.NET服务器端都会重新生 ...
- 【easyui】treegrid逐级加载源码
当初看这源码的目的是: 1.treegrid是怎么实现逐级加载树结构的. 解: 见demo,主要就是点击节点的时候会请求后台. 2.treegrid加载后,第二次展开节点会不会再次请求后台. 解:第二 ...
- cf1266D
注意到每一个的点出入流是不会变的,因此本质是让构造一张图满足这个出入流并且边上的流量之和最少,显然流量是平衡的,也就是所有节点的出入流之和为0 因此我们可以直接暴力的选择让负数点向正数点连边,连之后就 ...
- npm常用模块之cross-env使用
更多npm常用模块使用请访问:npm常用模块汇总 cross-env这是一款运行跨平台设置和使用环境变量的脚本. 为什么需要cross-env? NODE_ENV=production像这样设置环境变 ...
- ASP.NET MVC中ActionResult的不同返回方式
1.返回视图 return View();//返回方法名对应的视图 return View("aaa");//返回名称为aaa的视图 2.返回文本内容 return Content ...