根据hibernate的文档,有两种方式实现实体对象的主键自动增长。
第一种:设置ID的增长策略是sequence,同时指定sequence的名字,最好每个表建一个sequence,此种做法就如同MS-SQL,MY-SQL中的自动增长一样,不需要创建触发器
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.liyanframework.demo.domain">
<class name="Department" table="DEPARTMENT">
<id name="id" column="ID">
<generator class="sequence">
<param name="sequence">DEPARTMENT_ID_SEQ</param>
</generator>
</id>
<property name="name" column="NAME" type="string" />
<property name="description" column="DESCRIPTION" type="text" />
</class>
</hibernate-mapping>
第二种:设置ID的增长策略是native,但是需要创建一个名字为hibernate_sequence(这个名字好像是hibernate默认的 sequence名字,不创建会出错的)的全局使用的sequence,然后再对每一个表的ID生成的时候,使用触发器,取得 hibernate_sequence.CURRVAL作为新记录的ID,
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.liyanframework.demo.domain">
<class name="Department" table="DEPARTMENT">
<id name="id" column="ID">
<generator class="native">
</generator>
</id>
<property name="name" column="NAME" type="string" />
<property name="description" column="DESCRIPTION" type="text" />
</class>
</hibernate-mapping>
比 较两种做法,第二种做法也就是hibernate在代码中,实现了oracle中的触发器功能。对于不同的情况,选择不懂的做法。如果新的系统,新建的 oracle数据库,推荐使用第一种做法,简单,容易移植到其他支持自动增长的数据库;如果是老的系统,需要把其他数据库转换为oracle的,那就要用 第二种了,使用native的方式,可以不改动配置文件,兼容oracle和mysql之类带有自动增长的数据库。
分享到:
相关推荐
1. 设计数据库表:在 Oracle 数据库中,创建名为 Student 的表,包含三个字段:Student_ID(主键,整型,自动增长)、Student_Name(学员姓名,字符串类型)和 Student_Age(学员年龄,整型)。由于 Oracle 没有内置...
这种策略下,每次插入新记录时,主键值会自动递增,但由于依赖于特定的数据库特性,因此不适合多进程并发场景。 4. **Identity**:依赖于底层数据库支持的自动增长特性,如MySQL的`AUTO_INCREMENT`。这种方式易于...
在Oracle数据库中,由于其不支持像MySQL那样的自动递增主键,通常会使用序列(Sequence)来模拟这一行为。在提供的压缩包中,包含有创建Oracle自增序列的SQL语句,这将用于生成唯一的ID,作为主键使用。 在这个实例...
- **描述**:Hibernate 自动为主键提供一个递增的值。但这种方式只适用于单个 Hibernate 实例,多实例并发操作时可能会导致主键冲突。 - **优点**:简单易用。 - **缺点**:不支持多实例环境。 - **应用场景**:...
Hibernate 映射文件 id 的 generator 配置方法是 Hibernate 框架中的一种重要配置,用于生成持久化类实例的唯一标识符。下面将对 Hibernate 映射文件 id 的 generator 配置方法进行详细的解释。 首先,generator ...
- **简介**:`increment` 策略由 Hibernate 维护一个内部计数器,并在每次插入新记录时递增。 - **应用场景**:适用于单个应用实例的开发环境。 - **特点**: - 实现简单,易于理解。 - 在多实例或多线程环境下...
- Hibernate定义了多种数据类型和主键生成策略,如assigned(手动指定)、increment(自动递增)、identity(数据库自增长)、sequence(数据库序列)、native(根据数据库类型自动选择)、uuid(128位UUID)、...
- `<id>`标签定义主键,`<generator>`标签可以设置主键生成策略,如`increment`表示自动递增。 - `<property>`标签映射类的属性到数据库的列,包括类型和列名。 ### 3. 操作类 - `SessionFactory`是Hibernate的核心...
- **描述**:Hibernate 自动为主键分配一个递增的值,但此策略仅在一个 JVM 实例内有效,因此在多线程或多实例环境下可能引发问题。 - **应用场景**:适用于单机应用或测试环境,但在生产环境中应谨慎使用。 #### 4...
- `increment`: 在应用实例内递增,不适用于集群环境。 - `identity`: 依赖数据库自身的主键生成机制(如 SQL Server 的 `IDENTITY`)。 - `sequence`: 使用数据库 Sequence,如 Oracle。 - `native`: 根据数据库...
- 仅适用于单个Hibernate实例或集群环境中所有节点共用一个Session Factory的场景。 - 不支持数据库的序列功能,因此在Oracle、DB2等支持序列特性的数据库上不可用。 **应用场景:** - 单机环境或多个应用实例共享...
`oracle中设置自增主键(id).doc`可能会讲解在Oracle数据库中创建自动递增的主键字段。在Oracle中,虽然没有像MySQL那样的`AUTO_INCREMENT`关键字,但可以使用`SEQUENCE`对象来达到相同的效果,为新插入的记录自动...
4. **无参构造器**:默认情况下,Hibernate会寻找一个无参数的构造器来实例化对象,如果POJO类没有提供,则可能会导致异常。 ### 配置文件详解 #### Hibernate配置文件(hibernate.cfg.xml) 这个文件包含了...
- **Increment**:主键值由Hibernate自动递增,但需要数据库支持,如Oracle和DB2,不适合多进程并发环境。 - **Sequence**:适用于支持序列的数据库,如Oracle和DB2,需要在映射文件中配置。 - **Identity**:依赖于...
### Hibernate主键生成方式详解 #### 一、概述 Hibernate 是一款开源的对象关系映射 (ORM...此外,根据实际使用的数据库类型和业务需求,也可以考虑使用 `native` 策略,让 Hibernate 自动选择最合适的主键生成方式。
- **`identity`**:自动增长序列,适用于支持自动递增功能的数据库。 - **`uuid.hex`**:生成一个32位的十六进制字符串作为OID,要求OID字段的数据类型为字符串。 - **`increment`**:简单地按顺序递增,但在分布式...
- `identity`:依赖于数据库的自动递增功能,如MySQL。 - `sequence`:使用数据库的序列,如Oracle。 - `native`:根据数据库的方言自动选择一种策略。 4. **级联操作(Cascade)**:`cascade="delete"`表示当...
5. increment:该策略主键按数值顺序递增。此方式的实现机制为在当前应用实例中维持一个变量,以保存着当前的最大值,之后每次需要生成主键的时候将此值加1作为主键。 6. identity:该策略采用数据库提供的主键生成...