根据hibernate的文档,有两种方式实现实体对象的主键自动增长。
第一种:设置ID的增长策略是sequence,同时指定sequence的名字,最好每个表建一个sequence,此种做法就如同MY-SQL中的自动增长一样,不需要创建触发器,具体的oracle数据库脚本及hibernate配置文件如下:
[1]oracle数据库创建sequence:
-- Create sequence create sequence TYPEID minvalue 1 maxvalue 999999999999999999999999999 start with 1 increment by 1 cache 20;
以上属性,大都看一下中文就能明白其中的意思,唯独最后一个:cache是多少数字放进数据库缓存等待程序去调用它们来命名ID。如果cache设置数字太大,那么ID就会有跳序号的可能(比如调用了1-18的序号就关闭与数据库的会话,那么19和20将会被丢弃,下次取序号就会跳到21开始);而如果设置数字太小,缓存log将会很多。
[2]hibernate映射文件的配置:
<id name="id" type="java.lang.Integer"> <column name="ID" length="27" /> <generator class="sequence" > <param name="sequence">TYPEID</param> </generator> </id> <property name="telephone" type="java.lang.String"> <column name="TELEPHONE" length="12" not-null="true" /> </property>
在hibernate映射文件中,对ID的生成策略选择sequence,指定sequence的名字TYPEID就可以了,当你保存新对象的时候,hibernate会自动取得从start with开始的序号作为新对象的ID保存到数据库,所以不需要再使用触发器再来生成新记录的ID!
第二种(本人尚未试用,以后更新)
相关推荐
通过以上内容可以看出,在Oracle环境下使用Hibernate的“native”策略生成主键是一种高效且灵活的方式。只需要在映射文件中简单地指定`<generator class="native"></generator>`即可实现。同时,还需要注意数据库中...
而Hibernate提供了跨数据库的主键生成策略,例如`native`策略,它会根据底层数据库自动选择合适的主键生成方式(如MySQL的自动增长ID或Oracle的序列)。 在JPA中,通过`@GenericGenerator`注解可以定义主键的生成...
5. **Native方式**:`<generator class="native"/>` 这是Hibernate提供的一个便捷策略,它会根据底层数据库的类型自动选择合适的主键生成方式。例如,对于Oracle会选择Sequence,对于MySQL则选择Identity。这种方式...
- **描述**:对于不同的数据库,`native` 策略会采用不同的主键生成方式。例如,在 Oracle 数据库中使用 Sequence 方式;而对于 MySQL 和 SQL Server,则采用 `identity` 方式(即自增字段)。 - **优点**:灵活性...
- 对于 Oracle 数据库,采用 `Sequence` 方式生成主键。 - 对于 MySQL 和 SQL Server 数据库,则采用 `Identity` 方式生成自增主键。 - **特点**: - 实现简单,无需过多配置。 - 高度兼容不同数据库。 - 是最...
- **应用场景**:在 Oracle 数据库中常见,因为 Oracle 不支持自增字段,而 Sequence 是一种高效的解决方案。 #### 5. Identity - **描述**:利用 SQL Server 和 MySQL 的 AUTO_INCREMENT 特性自动为字段分配下一...
### Hibernate的主键生成方式详解 #### 一、概述 在使用Hibernate进行对象关系映射时,一个重要的概念就是如何为持久化实体类中的主键字段生成唯一标识符。主键是表中的一列或一组列,其值是唯一的,用于唯一地...
本篇文章将深入探讨JPA的4种主键生成策略以及Hibernate的13种主键生成策略,并通过实例来帮助理解。 ### JPA主键生成策略 1. **`GenerationType.AUTO`**:这是最常用的策略,具体的生成方式由数据库供应商决定,...
在Oracle数据库环境下,当需要为表创建自动增长的主键时,通常会使用Oracle的sequence机制。本文将详细介绍如何在Hibernate中使用Oracle sequence,以及在使用过程中应注意的一些事项。 首先,我们来看如何为不同的...
这种方式虽然灵活,但可能导致主键冲突,因此不推荐使用。 2. **increment**: increment策略由Hibernate在内存中生成主键,每次递增1。它不依赖于数据库的序列或自增功能,因此可以跨数据库使用。然而,由于它是...
数据库自身处理主键的自增,适用于long、short或int类型。不适用于所有数据库系统,只在特定数据库中可用。 3. **seqhilo**:针对Oracle、DB2等支持Sequence的数据库,用于long、short或int类型。Sequence是数据库...
Native策略是一种智能选择策略,Hibernate会根据当前使用的数据库类型自动选择最合适的主键生成策略,如identity、sequence或hilo。这种方式的最大优点是灵活性和兼容性,开发者无需关心底层数据库的细节,可以专注...
这是一种智能选择策略,根据底层数据库的特性自动选择合适的主键生成方式。在注解中常用`@GeneratedValue(strategy = GenerationType.AUTO)`。 7. **-native策略**: 类似于Auto,但会更加灵活,如果数据库支持...
2. native:该策略由Hibernate根据使用的数据库自行判断采用identity、hilo、sequence其中一种作为主键生成方式。 3. hilo:该策略通过hi/lo算法实现的主键生成机制,需要额外的数据库表或字段提供高位值来源。 4. ...
一种优化的主键生成方式,使用较小的整数范围(高位数)和数据库表中的行(低位数)来生成主键,减少对数据库的访问。使用`<generator class="hilo">`。 理解并正确选择主键生成策略对于优化数据库性能、保证数据...
主键可以分为两种类型:自然主键和代理主键。 1. **自然主键**:指使用具有业务逻辑含义的字段作为表的主键。例如,在用户信息表中,可以采用用户的身份证号码作为主键。这种方式的优势在于主键本身具有业务意义,...