Hibernate提供的内置主键生成器

55 篇文章 0 订阅
24 篇文章 0 订阅

标识符生成器

描述

increment

适用于代理主键。由Hibernate自动以递增的方式生成标识符,每次增量为1

identity

适用于代理主键。由底层数据库生成标识符,前提条件是底层数据库支持自动增长字段类型

sequence

适用于代理主键。Hibernate根据底层数据库的序列来生成标识符。前提条件是底层是据库支持序列

hilo

适用于代理主键。Hibernate根据high/low算法来生成标识符。Hibernate把特定表的字段作为“high”值。在默认情况下选用hibernate_unique_key表的next_hi字段

native

适用于代理主键。根据底层数据库对自动生成标识符的支持能力,来选择identity,sequencehilo

uuid.hex

适用于代理主键。Hibernate采用128位的UUIDUniversal Unique Identification)算法来生成标识符。该算法能够在网络环境中生成惟一的字符串标识符。这种标识符策略并不流行,因为字符串类型的主键比整数类型的主键占用更多的数据库空间。

assigned

使用于自然主键。由Java应用程序负责生成标识符,为了能让Java应用程序设置OID,不能把setId()方法声明为private类型。应该尽量避免使用自然主键。



在User.hbm.xml文件中配置如下:

<hibernate-mapping>
    <class name="com.yourcompany.hibernate.commons.User" table="user" catalog="info">
        <id name="id" type="java.lang.Integer">
            <column name="id" length="20" />
            <generator class="increment" />
        </id>
        <property name="userName" type="java.lang.String">
            <column name="userName" length="20" />
        </property>
        <property name="passWord" type="java.lang.String">
            <column name="passWord" length="20" />
        </property>
    </class>
</hibernate-mapping>

如果使用的是联合主键,配置格式如下,注意主键类应实现Serializable接口:

<hibernate-mapping>
    <class name="com.yourcompany.hibernate.commons.User" table="user" catalog="info">
        <composite-id name="primaryKey" class="com.yourcompany.bean.PrimaryKey">
            <key-property name="userName" column="userName" type="string"></key-property>
            <key-property name="position" column="position" type="string"></key-property>  
        </composite-id>  
        <property name="passWord" type="java.lang.String">
            <column name="passWord" length="20" />
        </property>
    </class>
</hibernate-mapping>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值