hibernate之标识符生成器用法
来源:互联网 发布:遍历搜索算法 编辑:程序博客网 时间:2024/06/09 17:57
java靠内存地址区分或识别同一个类的不同对象;关系数据库靠主键的唯一性区分或识别同一个表的不同记录;hibernate用标识符(OID)来区分对象。
hibernate标识符生成器就是hibernate-mapping映射文件中主键的产生方式。
hibernate有以下常用的标识符生成器:
1.increment
increment标识符生成器由hibernate以递增的方式为代理主键赋值。
初始化时读取数据库最大主键值,在主键的基础上增加1。只适用于单个hibernate访问数据库的情况成立,若多个线程访问,执行失败。
比如第一个线程访问数据库最大主键值为5,增加1后存入数据库的应该为6,而第二个线程同时读到的最大主键值为5,增加后为6,相当于两条id为6的数据同时存入数据库,
违反数据库id的唯一性,不可重复性,导致实行失败。
所以,increment虽然能够使用于任何数据库,但是不能使用于集群环境下。
2.identity
identity由底层数据库负责生成标识符,要求底层数据库把主键定义为自动增长字段类型。
适用于底层数据库支持自动增长字段类型的数据库。
3.sequence
sequence利用底层数据提供的序列生成标识符。
映射文件中配置序列方式生成主键,创建表时创建名为test_id_seq的序列名。
<generator class="sequence">
<param name="sequence">test_id_seq</param>
</generator>
适用于支持序列的数据库。
4.hilo
hilo按照hi/lo高低算法生成,高值存放在hi_value表的next_value字段中。
<generator class="hilo">
<param name="table">hi_value</param>
<param name="column">next_value</param>
<param name="max_lo">1000</param>
</generator>
单独创建一个表
create table hi_value(
next_value Integer
);
同时默认插入一个值insert into hi_value values(0);
每次为表对象插入数据时,从hi_value表中读取next_value作为对象ID插入数据库,同时hi_value中next_value将随之改变。需要在同一个事务中完成ID的读取与插入。
不依赖于数据库,使用于任何数据库。
5.native
自动识别数据库底层支持标识符,为hibernate选择合适的标识符生成器,分别从identity,sequence,hilo选取。
eg.mysql or ms sql server 选择identity,oracle选择sequence等。
6.uuid
hibernate采用128位的算法来生成标识符。在网络环境中生成唯一字符串标识符。字符串较long,int,short占用内存大,不常用。
7.
assigned
以上都是用于代理主键,就是主键没有业务含义,而assigned适用于自然主键,该字段具有业务含义,选择作为的主键的属性权限设置成public,避免设置为private。
- hibernate之标识符生成器用法
- Hibernate 之 标识符生成器/映射类型
- Hibernate内置标识符生成器
- Hibernate内置标识符生成器
- Hibernate标识符生成器
- Hibernate内置标识符生成器
- 【Hibernate学习笔记】内置标识符生成器的用法
- Hibernate的ID标识符生成器
- Hibernate的ID标识符生成器
- Hibernate的ID的标识符生成器
- Hibernate的ID的标识符生成器
- Hibernate的ID的标识符生成器
- Hibernate提供的内置标识符生成器
- Hibernate中的8种标识符生成器
- Hibernate内置对象标识符(OID)生成器
- Hibernate内置的持久化标识符生成器
- Hibernate提供的几种内置标识符生成器
- Hibernate之自定义ID生成器
- Js作用域与作用域链
- MonkeyTalk自动化之FAQ
- 用递归方法建立二叉树
- shell函数返回值接收问题
- JAVA 各种数值类型最大值和最小值 Int, short, char, long, float,&nbs
- hibernate之标识符生成器用法
- 工厂模式和抽象工厂模式有何不同?
- 将eclipse项目部署到tomcat根目录
- 第八课:基本着色
- Android开发的那些坑和小技巧
- Activity - 启动模式
- CSS定位属性
- CodeForces NO.70A Cookies
- 创建compass和sass工程