Hibernate内置对象标识符(OID)生成器

本文介绍了Hibernate的四种内置对象标识符(OID)生成器:increment、identity、sequence和native。increment通过获取最大主键值加1来生成主键,适合单进程但不适用于集群环境。identity依赖数据库自动增长功能,如MySQL的auto_increment。sequence利用数据库序列生成主键,适用于支持序列的数据库。native则根据数据库方言自动选择生成方式,适合跨数据库平台开发。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.increment标识符生成器:

<hibernate-mapping>
    <class name="包名+类名" table="表名">
        <id name="id" type="long" column="ID">
            <meta attribute="scope-set">private</meta>
            <generator class="incorement">
        </id>
    </class>
</hibernate-mapping>

Hibernate持久化一个对象的时候,会以自增的方式自动生成标识符。事实上Hibernate会首先取得最大的主键值,然后自增1,insert到数据库中.

当有多个进程的hibernate同时 操作数据库时,读取的最大键值相同,这样导致一个进程插入失败。

使用范围:

  • 不依赖底层的数据库系统,适合于所有的数据库系统。
  • 适应于只有单个hibernate应用进程访问同一个数据库的场合,在集群环境下不推荐使用(发生主键冲突)
  • OID必须是long、int、short设置为byte时抛异常。

2.identity:

<hibernate-mapping>
    <class name="包名+类名" table="表名">
        <id name="id" type="long" column="ID">
            <meta attribute="scope-set">private</meta>
            <generator class="identity">
        </id>
    </class>
</hibernate-mapping>

要求底层数据库把主键设为自动增长:
MySql: auto_increament
MS SQL Server: identity

优点:不会发生increament方式的并发操作问题
使用范围:

  • 依赖于底层数据库,要求底层数据库必须支持自动增长字段类型
  • OID必须是long、int、short设置为byte时抛异常。

3.sequence:

<hibernate-mapping>
    <class name="包名+类名" table="表名">
        <id name="id" type="long" column="ID">
            <meta attribute="scope-set">private</meta>
            <generator class="sequence">
        </id>
    </class>
</hibernate-mapping>

hibernate持久化一个对象时,首先曾底层数据库系统的序列中获得一个唯一序列号,再把他设置成主键。

使用范围:

  • 要求数据库系统必须支持序列
  • OID必须是long、int、short设置为byte时抛异常。

4.native:

<hibernate-mapping>
    <class name="包名+类名" table="表名">
        <id name="id" type="long" column="ID">
            <meta attribute="scope-set">private</meta>
            <generator class="native">
        </id>
    </class>
</hibernate-mapping>

使用范围:

-与底层数据库无关性。根据数据库的方言,自动生成不同的主键生成方式。
适合跨数据库平台开发,根据数据库类型自动选择合适的标识符生成器**
- OID必须是long、int、short设置为byte时抛异常。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值