`
coolworm
  • 浏览: 44218 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

hibernate oracle ID自动递增的实例

阅读更多

根据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 楼 coolworm 2009-08-28  
<a href="http://s.click.taobao.com/t_1?i=qXMUIKuVD4BSrw%3D%3D&p=mm_13912233_0_0&n=11">读写10M-13M足量~SONY MS 超高速 记忆棒 /8G/PSP 红棒 另有16GB</a>

相关推荐

    hibernate连接oracle数据库.doc

    1. 设计数据库表:在 Oracle 数据库中,创建名为 Student 的表,包含三个字段:Student_ID(主键,整型,自动增长)、Student_Name(学员姓名,字符串类型)和 Student_Age(学员年龄,整型)。由于 Oracle 没有内置...

    Hibernate 帮助文档

    这种策略下,每次插入新记录时,主键值会自动递增,但由于依赖于特定的数据库特性,因此不适合多进程并发场景。 4. **Identity**:依赖于底层数据库支持的自动增长特性,如MySQL的`AUTO_INCREMENT`。这种方式易于...

    SSH_CRUD整合实例

    在Oracle数据库中,由于其不支持像MySQL那样的自动递增主键,通常会使用序列(Sequence)来模拟这一行为。在提供的压缩包中,包含有创建Oracle自增序列的SQL语句,这将用于生成唯一的ID,作为主键使用。 在这个实例...

    Hibernate主键生成策略

    - **描述**:Hibernate 自动为主键提供一个递增的值。但这种方式只适用于单个 Hibernate 实例,多实例并发操作时可能会导致主键冲突。 - **优点**:简单易用。 - **缺点**:不支持多实例环境。 - **应用场景**:...

    Hibernate映射文件id的generator配置方法

    Hibernate 映射文件 id 的 generator 配置方法是 Hibernate 框架中的一种重要配置,用于生成持久化类实例的唯一标识符。下面将对 Hibernate 映射文件 id 的 generator 配置方法进行详细的解释。 首先,generator ...

    hibernate主键生成策略

    - **简介**:`increment` 策略由 Hibernate 维护一个内部计数器,并在每次插入新记录时递增。 - **应用场景**:适用于单个应用实例的开发环境。 - **特点**: - 实现简单,易于理解。 - 在多实例或多线程环境下...

    Hibernate框架讲义.pdf

    - Hibernate定义了多种数据类型和主键生成策略,如assigned(手动指定)、increment(自动递增)、identity(数据库自增长)、sequence(数据库序列)、native(根据数据库类型自动选择)、uuid(128位UUID)、...

    Hibernate配置[归类].pdf

    - `&lt;id&gt;`标签定义主键,`&lt;generator&gt;`标签可以设置主键生成策略,如`increment`表示自动递增。 - `&lt;property&gt;`标签映射类的属性到数据库的列,包括类型和列名。 ### 3. 操作类 - `SessionFactory`是Hibernate的核心...

    hibernate 主键生成策略

    - **描述**:Hibernate 自动为主键分配一个递增的值,但此策略仅在一个 JVM 实例内有效,因此在多线程或多实例环境下可能引发问题。 - **应用场景**:适用于单机应用或测试环境,但在生产环境中应谨慎使用。 #### 4...

    hibernate。hbm.xml配置详解

    - `increment`: 在应用实例内递增,不适用于集群环境。 - `identity`: 依赖数据库自身的主键生成机制(如 SQL Server 的 `IDENTITY`)。 - `sequence`: 使用数据库 Sequence,如 Oracle。 - `native`: 根据数据库...

    hibernate各种主健详解

    - 仅适用于单个Hibernate实例或集群环境中所有节点共用一个Session Factory的场景。 - 不支持数据库的序列功能,因此在Oracle、DB2等支持序列特性的数据库上不可用。 **应用场景:** - 单机环境或多个应用实例共享...

    常见web中增删改查实例

    `oracle中设置自增主键(id).doc`可能会讲解在Oracle数据库中创建自动递增的主键字段。在Oracle中,虽然没有像MySQL那样的`AUTO_INCREMENT`关键字,但可以使用`SEQUENCE`对象来达到相同的效果,为新插入的记录自动...

    hibernate 详细配置

    4. **无参构造器**:默认情况下,Hibernate会寻找一个无参数的构造器来实例化对象,如果POJO类没有提供,则可能会导致异常。 ### 配置文件详解 #### Hibernate配置文件(hibernate.cfg.xml) 这个文件包含了...

    JAVA学习资料-Hibernate简介.doc

    - **Increment**:主键值由Hibernate自动递增,但需要数据库支持,如Oracle和DB2,不适合多进程并发环境。 - **Sequence**:适用于支持序列的数据库,如Oracle和DB2,需要在映射文件中配置。 - **Identity**:依赖于...

    Hibernate主键生成方式

    ### Hibernate主键生成方式详解 #### 一、概述 Hibernate 是一款开源的对象关系映射 (ORM...此外,根据实际使用的数据库类型和业务需求,也可以考虑使用 `native` 策略,让 Hibernate 自动选择最合适的主键生成方式。

    hibernate 学习笔记总结

    - **`identity`**:自动增长序列,适用于支持自动递增功能的数据库。 - **`uuid.hex`**:生成一个32位的十六进制字符串作为OID,要求OID字段的数据类型为字符串。 - **`increment`**:简单地按顺序递增,但在分布式...

    整理的Hibernate

    - `identity`:依赖于数据库的自动递增功能,如MySQL。 - `sequence`:使用数据库的序列,如Oracle。 - `native`:根据数据库的方言自动选择一种策略。 4. **级联操作(Cascade)**:`cascade="delete"`表示当...

    hibernate映射文件--主键生成策略[参考].pdf

    5. increment:该策略主键按数值顺序递增。此方式的实现机制为在当前应用实例中维持一个变量,以保存着当前的最大值,之后每次需要生成主键的时候将此值加1作为主键。 6. identity:该策略采用数据库提供的主键生成...

Global site tag (gtag.js) - Google Analytics