Hibernate实体类的*.hbm.xml配置文件:

一个参考例子:

  1. <hibernate-mapping>
  2. <!--
  3. name:实体Bean,即类名
  4. table:实体Bean对应的数据库中的表名
  5. schema:数据库拥有者
  6. catalog:使用的数据库名称
  7. -->
  8. <class name="xiao.zhang.bean.BooksTemp" table="booksTemp" schema="dbo" catalog="MyBookShop">
  9. <!--
  10. 主键列
  11. generator class:主键生成的标识
  12. -->
  13. <id name="id" type="java.lang.Integer">
  14. <column name="Id" />
  15. <generator class="increment"/>
  16. </id>
  17. <property name="title" type="java.lang.String">
  18. <column name="Title" length="200" />
  19. </property>
  20. <property name="author" type="java.lang.String">
  21. <column name="Author" length="200" />
  22. </property>
  23. <property name="isbn" type="java.lang.String">
  24. <column name="ISBN" length="50" />
  25. </property>
  26. </class>
  27. </hibernate-mapping>

1) assigned
主键由外部程序负责生成,无需Hibernate参与。



2) hilo
通过hi/lo 算法实现的主键生成机制,需要额外的数据库表保存主
键生成历史状态。



3) seqhilo
与hilo 类似,通过hi/lo 算法实现的主键生成机制,只是主键历史
状态保存在Sequence中,适用于支持Sequence的数据库,如Oracle。



4) increment
主键按数值顺序递增。此方式的实现机制为在当前应用实例中维持
一个变量,以保存着当前的最大值,之后每次需要生成主键的时候
将此值加1作为主键。
这种方式可能产生的问题是:如果当前有多个实例访问同一个数据
库,那么由于各个实例各自维护主键状态,不同实例可能生成同样
的主键,从而造成主键重复异常。因此,如果同一数据库有多个实
例访问,此方式必须避免使用。



5) identity
采用数据库提供的主键生成机制。如DB2、SQL Server、MySQL
中的主键生成机制。



6) sequence
采用数据库提供的sequence 机制生成主键。如Oralce 中的
Sequence。



7) native
由Hibernate根据底层数据库自行判断采用identity、hilo、sequence
其中一种作为主键生成方式。



8) uuid.hex
由Hibernate基于128 位唯一值产生算法生成16 进制数值(编码后
以长度32 的字符串表示)作为主键。


9) uuid.string
与uuid.hex 类似,只是生成的主键未进行编码(长度16)。在某些
数据库中可能出现问题(如PostgreSQL)。



10) foreign
使用外部表的字段作为主键。
一般而言,利用uuid.hex方式生成主键将提供最好的性能和数据库平台适
应性。



    另外由于常用的数据库,如Oracle、DB2、SQLServer、MySql 等,都提
供了易用的主键生成机制(Auto-Increase 字段或者Sequence)。我们可以在数
据库提供的主键生成机制上,采用generator-class=native的主键生成方式。
不过值得注意的是,一些数据库提供的主键生成机制在效率上未必最佳,大量并发insert数据时可能会引起表之间的互锁。



       数据库提供的主键生成机制,往往是通过在一个内部表中保存当前主键状
态(如对于自增型主键而言,此内部表中就维护着当前的最大值和递增量),
之后每次插入数据会读取这个最大值,然后加上递增量作为新记录的主键,之
后再把这个新的最大值更新回内部表中,这样,一次Insert操作可能导致数据
库内部多次表读写操作,同时伴随的还有数据的加锁解锁操作,这对性能产生
了较大影响。
因此,对于并发Insert要求较高的系统,推荐采用uuid.hex 作为主键生成
机制。
 

Hibernate主键生成种类相关推荐

  1. 基于按annotation的hibernate主键生成策略

    这里讨论代理主键,业务主键(比如说复合键等)这里不讨论. 一.JPA通用策略生成器 通过annotation来映射hibernate实体的,基于annotation的hibernate主键标识为@Id ...

  2. JPA实体注解与hibernate主键生成策略

    JPA实体注解与hibernate主键生成策略 用hibernate注解开发项目,对于主键的生成策略有些模糊,下面是从新浪网里面看到的一篇关于hibernate注解以及主键生成策略的文章,值得一看: ...

  3. jpa基于按annotation的hibernate主键生成策略

    JPA注解持久化类很方便,需要jar包:ejb3-persistence.jar下载 一.JPA通用策略生成器  通过annotation来映射hibernate实体的,基于annotation的hi ...

  4. JavaEE持久层框架对比与hibernate主键生成策略总结

    一.持久层框架对比 ORM框架:即对象关系映射.它把数据库表映射到pojo类,然后通过对类的操作来实现对数据库的增删改查,sql语句自动生成. 对于代码开发者来说,就是在代码里先创建数据库连接对象,然 ...

  5. 剖析Hibernate主键生成几种常用方式

    剖析Hibernate主键生成几种常用方式 2009-09-28 10:52 佚名 IT168 字号:T | T 这里介绍Hibernate主键生成几种常用方式,由Hibernate根据不同的数据库方 ...

  6. hibernate主键生成策略 问题

    转载自:https://www.jianshu.com/p/79311d81e77f 首先,如果出现这个问题你很有可能就是没有很好的注意到主键的生成策略.说到这里是不是就像去看看主键的生成呢? 在.h ...

  7. Hibernate主键生成策略总结(这里面讲的很详细)

    Hibernate提供的主键生成策略,使我们可以在实体类的映射xml文件中设定关键字来告诉hibernate我们要使用的主键生成方式,然后hibernate会根据设定完成数据库的主键控制. 一.首先通 ...

  8. 【Hibernate】hibernate主键生成策略与配置详解

    //####################################################### **Hibernate各种主键生成策略与配置详解** //############# ...

  9. Hibernate主键生成策略与save()方法是否发sql语句的研究

    public class SessionFlushTest extends TestCase {              /**     * 测试uuid主键生成策略     */       pu ...

最新文章

  1. 新建仓库后第一次提交的问题
  2. linux默认开启sudo_Sudo漏洞允许非特权Linux和macOS用户以root身份运行命令
  3. AT5160-[AGC037C]Numbers on a Circle【贪心,堆】
  4. RT-Thread中堆和栈内存的分配
  5. 以孩子兄弟链表为存储结构,请设计递归算法求树的高度
  6. 设置浏览器为【默认浏览器】的两种方式
  7. matlab中probIdx = 2 2,利用1stOpt1.5 pro来进行多元非线性拟合
  8. 黄色光纤跳线、橙色光纤跳线、蓝色光纤跳线区别
  9. 高等数学学习笔记(1)——微分方程解法公式
  10. 再见,2018俄罗斯世界杯!
  11. October CMS - 快速入门 3 创建主题
  12. 如何移动桌面文件到计算机,怎么样把电脑桌面文件全部转移到指定文件夹
  13. 【数学】二阶非齐次微分方程的解法
  14. iphone win7无法识别_电脑无法识别iphone、ipad的解决办法
  15. 基金买卖波段指标 主图 源码 效果图
  16. 火焰图Flame Graph
  17. lodash 学习记录
  18. 朱嘉明 | 认知未来货币需要新的思想资源
  19. 风华才气,春华秋实———忆信管学子杨友岁月如歌
  20. 通过docker安装FastDFS

热门文章

  1. java 中常用方法_java_中常用的方法总结
  2. mysql grant all详解_grant all赋权后mysql.user表权限字段还是N,但能登录和新建表
  3. Spring 面试多频 18问
  4. Linux yum 命令详解 源配置
  5. RabbitMQ(七):RabbitMQ 消费端限流、TTL、死信队列是什么?
  6. 真厉害用python只要50行代码爬取黑丝美眉纯欲高清图
  7. 无冬连接不上账号服务器,电脑中玩无冬online掉线怎么回事_电脑中玩无冬online游戏总是掉线如何修复...
  8. 织梦html地图插件,织梦dede网站地图xml生成插件(图文教程)
  9. sql 拆分_技术分享 | 基于分布式中间件的SQL改造指南
  10. java 反射机制_Java反射机制原理探究