hibernate主键生成机制
来源:互联网 发布:cs1.6弹道优化脚本 编辑:程序博客网 时间:2024/05/24 07:03
1、assigned
主键由外部程序负责生成,在save()之前需要设置该id,与hibernate和数据库都无关
<id name="id" column="id"> <generator class="assigned" /></id>
2、identity
由底层数据库生成,该主键必须设成自动增长,因此底层数据库需支持自动增长,如DB2、SQL Server、MySQL、Sybase和HypersonicSQL等,Oracle这类没有自增字段的则不支持。如果使用MySQL数据库,则主键字段必须设置成auto_increment。
<id name="id" column="id"> <generator class="identity" /></id>
3、native
由hibernate根据底层数据库自行判断采用identity、hillo、sequence中一种作为主键,例如MySQL使用identity,Oracle使用sequence。根据数据库自动选择,项目中如果用到多个数据库时,可以使用这种方式,使用时需要设置表的自增字段或建立序列,建立表等。
<id name="id" column="id"> <generator class="native" /></id>
4、UUID
是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。按照开放软件基金会(OSF)制定的标准计算,用到了以太网卡地址、纳秒级时间、芯片ID码和许多可能的数字。Hibernate在维护主键时,不用去数据库查询,从而提高效率,而且它是跨数据库的,以后切换数据库极其方便。唯一缺点长度较大,并无任何业务逻辑意义。
<id name="id" column="id"> <generator class="uuid" /></id>
5、sequence
采用数据库提供的sequence机制生成主键,需要数据库支持sequence。如oralce、DB、SAP DB、PostgerSQL、McKoi中的sequence。MySQL这种不支持sequence的数据库则不行(可以使用identity)。Hibernate生成主键时,查找sequence并赋给主键值,主键值由数据库生成,Hibernate不负责维护,使用时必须先创建一个sequence,如果不指定sequence名称,则使用Hibernate默认的sequence,名称为hibernate_sequence,前提要在数据库中创建该sequence。
<generator class="sequence"> <param name="sequence">hibernate_id</param></generator><param name="sequence">hibernate_id</param> 指定sequence的名称
6、increment由Hibernate从数据库中取出主键的最大值(每个session只取1次),以该值为基础,每次增量为1,在内存中生成主键,不依赖于底层的数据库,因此可以跨数据库。Hibernate调用org.hibernate.id.IncrementGenerator类里面的generate()方法,使用select max(idColumnName) from tableName语句获取主键最大值。该方法被声明成了synchronized,所以在一个独立的Java虚拟机内部是没有问题的,然而,在多个JVM同时并发访问数据库select max时就可能取出相同的值,再insert就会发生Dumplicate entry的错误。所以只能有一个Hibernate应用进程访问数据库,否则就可能产生主键冲突,所以不适合多进程并发更新数据库,适合单一进程访问数据库,不能用于群集环境。只有在没有其他进程往同一张表中插入数据时才能使用,在集群下不要使用。
特点:跨数据库,不适合多进程并发更新数据库,适合单一进程访问数据库,不能用于群集环境。
<id name="id" column="id"> <generator class="increment" /></id>
- Hibernate主键生成机制
- hibernate主键生成机制
- hibernate主键生成机制
- Hibernate主键生成机制
- hibernate主键生成机制
- hibernate的主键生成机制
- Hibernate的主键生成机制
- Hibernate的主键生成机制
- Hibernate 主键生成机制归纳
- Hibernate主键生成机制问题的解决方法
- hibernate联合主键生成机制(annotation方式)
- Hibernate的increment主键生成机制带来的问题(转)
- Hibernate的increment主键生成机制带来的问题(转) .
- hibernate联合主键生成机制(annotation方式)
- hibernate联合主键生成机制(annotation方式)
- hibernate联合主键生成机制(annotation方式)
- hibernate联合主键生成机制(annotation方式)
- hibernate中主键生成机制hi/lo算法说明
- MySql主从配置 Linux下配置
- 进程间通信-共享内存
- 单点登录
- 【greenplum】ERROR: Interconnect error writing an outgoing packet: Operation not permitted
- C++之模板实例化
- hibernate主键生成机制
- androidStudio设置字体
- msf生成shellcode msfshe
- 自定义添加KAFKA服务启动时报错
- 异地,多活,Mysql数据库改造
- 判断点是否在多边形内部
- jquery导入Excel文件
- Android读取sql文件并导入数据库
- ultraedit 如何添加Verilog语法高亮显示功能