Hibernate4.x之映射文件
POJO类和数据库的映射文件*.hbm.xml
POJO类和关系数据库之间的映射可以用一个XML文档来定义
通过POJO类的数据库映射文件,Hibernate可以理解持久化类和数据库表之间的对应关系,也可以理解持久化类属性与数据库表列之间的对应关系
在运行时Hibernate将根据这个映射文件来生成各种SQL语句
映射文件的扩展名为.hbm.xml
映射文件说明
hibernate-mapping
-类层次:class
主键:id
基本类型:property
实体引用类:many-to-one | one-to-one
集合:set | list | map | array
- one-to-many
- many-to-many
子类:subclass | joined-subclass
其它:component | any等
-查询语句:query(用来放置查询语句,便于对数据库查询的统一管理和优化)
每个Hibernate-mapping中可以同时定义多个类。但更为推荐为每个类都创建一个单独的映射文件
映射对象标识符
Hibernate使用对象标识符(OID)来建立内存中的对象和数据库表中记录的对应关系。对象的OID和数据表的主键对应。Hibernate通过标识符生成器来为主键赋值
Hibernate推荐在数据表中使用代理主键,即不具备业务含义的字段。代理主键通常为整数类型,因为整数类型比字符串类型要节省更多的数据库空间
在对象-关系映射文件中,<id>元素用来设置对象标识符。<generator>子元素用来设定标示符生成器
Hibernate提供了标识符生成器接口:IdentifierGenerator,并提供了各种内置实现
主键生成策略generator
Hibernate提供的内置标识符生成器
---------------------------------------------------------------------------------------------
increment:适用于代理主键,有Hibernate自动以递增的方式生成
identity:适用于代理主键,有底层数据库生成标识符
sequence:适用于代理主键,Hibernate根据底层数据库的序列生成标识符,这要求数据库支持序列
hilo:适用于代理主键,Hibernate分局high/low算法生成标识符
seqhilo:适用于代理主键,使用一个高/低位算法来高效的生成long,short或int类型的标识符
native:适用于代理主键,根据底层数据库对自动生成标识符的方法,自动选择identity、sequence或hilo
uuid-hex:适用于代理主键,Hibernate采用采用120为的UUID算法生成标识符
uuid-string:适用于代理主键,UUID被编码成一个16字符长的字符串
assigned:适用于自然主键,由Java应用程序负责生成标识符
foreign:适用于代理主键,使用另外一个相关联的对象的标识符
---------------------------------------------------------------------------------------------
increment标识符生成器
increment标识符生成器由Hibernate以递增的方式为代理主键赋值
Hibernate会先读取NEWS表中的主键的最大值,而接下来向NEWS表中插入记录时,就在max(id)的基础上递增,增量为1
适用范围:
由于increment生成标识符机制不依赖与底层数据库系统,因此它适用于所有的数据库系统
适用于只有单个Hibernate应用进程访问同一个数据库的场合,在集群环境下不推荐使用它
OID必须为long、int或short类型,如果把OID定位byte类型,在运行时会抛出异常
identity标识符生成器
identity标示符生成器有底层数据库来负责生成标识符,它要求底层数据库把主键定义为自动增长字段类型
适用范围:
由于identity生成标识符的机制依赖于底层数据库系统,因此,要求底层数据库系统必须支持自动增加字段类型。支持自动增长字段类型的数据库包括:DB2、MySQL、MS SQL SERVER、Sybase等
OID必须为long、int或short类型,如果把OID定位byte类型,在运行时会抛出异常
sequence标识符生成器
sequence标识符生成器利用底层数据库提供的序列来生成标识符
<id name="id">
<generator class="sequence">
<param name="sequence">news_seq</param>
</generator>
</id>
Hibernate在持久化一个News对象时,先从底层数据库的news_seq序列中获得一个唯一的标识号,再把它作为主键值
适用范围:
由于sequence生成标识符的机制依赖于底层数据库的序列,因此,要求底层数据库必须支持序列,支持序列的数据库包括:DB2、Oracle等
OID必须为long、int或short类型,如果把OID定义为byte类型,在运行时会抛出异常
hilo标识符生成器
hilo标识符生成器由Hibernate按照一种high/low算法生成标识符,它从数据库的特定表的字段获取中high值
<id name="id">
<generator class="hilo">
<param name="table">HI_TABLE</param>
<param name="column">NEXT_VALUE</param>
<param name="max_lo">10</param>
</generator>
</id>
Hibernate在持久化一个News对象时,有Hibernate负责生成主键值。hilo标识符生成器在生成标识符时,需要读取并修改HI_TABLE表中的NEXT_VALUE值
适用范围:
由于hilo生成标识符机制不依赖与底层数据库系统,因此它适合所有的数据库系统
OID必须为long、int或short类型,如果把OID定义为byte类型,在运行时会抛出异常
native标识符生成器
native标识符生成器依据底层数据库对自动生成标识符的支持能力,来选择使用identity、sequence或hilo标识符生成器
适用范围:
由于native能根据底层数据库系统的类型,自动选择合适的标识符生成器,因此很适合于跨数据库平台开发
OID必须为long、int或short类型,如果把OID定义为byte类型,在运行时会抛出异常
-----------------------------------
Java时间和日期类型的Hibernate映射
在Java中,代表时间和日期的类型包括:java.util.Date和java.util.Calendar。此外,在JDBC API中还提供了3个扩展了java.sql.Date,java.sql.Time,和java.sql.TimeStamp,这三个类非别和标准SQL类型中的DATE,TIME和TIMESTAMP类型对应
在标准SQL中,DATE类型表示日期,TIME类型表示时间,TIMESTAMP类型表示时间戳,同时包含日期和时间信息
-------------------------------------------------------------------------
映射类型 Java类型 标准SQL类型 描述
date java.util.Date或java.sql.Date DATE 代表日期yyyy-MM-dd
time java.util.Date或java.sql.Time TIME 代表时间 hh:mm:ss
timestamp java.util.Date或java.sql.Timestamp TIMESTAMP 代表时间和日期 yyyy-MM-dd hh:mm:ss
calendar java.util.Calendar TIMESTAMP 代表时间和日期 yyyy-MM-dd hh:mm:ss
calendar_date java.util.Calendar DATE 代表日期yyyy-MM-dd
-------------------------------------------------------------------------
Hibernate4.x之映射文件的更多相关文章
- [原创]java WEB学习笔记77:Hibernate学习之路---Hibernate 版本 helloword 与 解析,.环境搭建,hibernate.cfg.xml文件及参数说明,持久化类,对象-关系映射文件.hbm.xml,Hibernate API (Configuration 类,SessionFactory 接口,Session 接口,Transaction(事务))
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- spring配置和映射文件
配置 <?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www. ...
- 内存映射文件MemoryMappedFile使用
参考资料: http://blog.csdn.net/bitfan/article/details/4438458 所谓内存映射文件,其实就是在内存中开辟出一块存放数据的专用区域,这区域往往与硬盘上特 ...
- IBatisNet -- 保护你的配置文件及映射文件信息
通常情况下我们在使用IBatisNet的时候,配置文件和映射文件都是暴露在外的,如果能进入到服务器,那么你的程序的操作数据库的SQL语句,数据库连接字符串等信息都将很轻松的被看到,这样是很危险的.然而 ...
- Hibernate关联映射 映射文件的配置
一:多对一单向关联 首先我们必须创建两个实体类 例如:Dept类 public class Dept { private Integer deptNo; private String dName; p ...
- NHibernate之映射文件配置说明
NHibernate之映射文件配置说明 1. hibernate-mapping 这个元素包括以下可选的属性.schema属性,指明了这个映射所引用的表所在的schema名称.假若指定了这个属性, 表 ...
- hibernate映射文件
Hibernate的持久化类和关系数据库之间的映射通常是用一个XML文档来定义的.该文档通过一系列XML元素的配置,来将持久化类与数据库表之间建立起一一映射.这意味着映射文档是按照持久化类的定义来创建 ...
- 使用ZwMapViewOfSection创建内存映射文件总结
标 题: [原创]使用ZwMapViewOfSection创建内存映射文件总结 作 者: 小覃 时 间: 2012-06-15,02:28:36 链 接: http://bbs.pediy.com/s ...
- hibernate用注解替代映射文件
1.首先把原来的映射文件删掉,给实体类添加注解: @Entity //声明当前类为hibernate映射到数据库中的实体类 @Table(name="news") //声明tabl ...
随机推荐
- PHPstorm 的快捷键
// ctrl+shift+n 查找文件// ctrl+j 插入活动代码提示// ctrl+alt+t 当前位置插入环绕代码// alt+insert ...
- 大批量DML操作应该注意什么?
问:大批量DML操作应该注意什么? 答:大批量DML操作可能会撑爆undo表空间,导致数据库挂起.因此我们应该设置一个合适的undo表空间,或对DML操作的分批提交.
- 十六、mysql 分区之 简单sql优化2
.索引的分类 B-Tree 基本支持 HASH 只有memory支持 R-Tree myisam支持 Full-text myisam支持(全文索引) .Memory引擎下只有“=”条件才会使用索引 ...
- PHP webserver 之 soap wsdl
强势插入:http://pan.baidu.com/s/1jG62oKm
- Oralce11 客户端的安装和 PlSql Developer 的配置
关于Oracle11服务器端安装时的配置问题我就不讲了,就是要安装DataBase1和DataBase2. 现在我来讲的是Oralce11 客户端的安装和PlSql的配置问题: 步骤一:选择图示,wi ...
- AFNetworking 简单应用
最近最学习 AFNetworking ,根据自己所学对 AFNetWorking 一些简单应用做了一下简单封装,主要有 get,post形式获取 xml,json,get 方式获取图片,下载文件,上传 ...
- C#查找子串在原串中出现次数
提供的是一种思路,和具体语言无关. string test = "good good study day day up"; string r = test.Replace(&quo ...
- BZOJ 1710: [Usaco2007 Open]Cheappal 廉价回文
Description 为了跟踪所有的牛,农夫JOHN在农场上装了一套自动系统. 他给了每一个头牛一个电子牌号 当牛走过这个系统时,牛的名字将被自动读入. 每一头牛的电子名字是一个长度为M (1 &l ...
- [转载]MongoDB查询优化原则
.在查询条件.排序条件.统计条件的字段上选择创建索引,可以显著提高查询效率. .用$or时把匹配最 多 结果的条件放在最前面,用$and时把匹配最 少 结果的条件放在最前面. .使用limit()限定 ...
- ural 1233
可以推出规律 每一个数第一次出现的位置 和 n*10后出现的位置 要特殊考虑 是10的倍数的情况(10,100,1000, .......) 它的位置是不会改变的 #include<cstd ...