Hibernate的主键声称策略
来源:互联网 发布:淘宝买东西优惠软件 编辑:程序博客网 时间:2024/06/08 16:55
1. 背景
数据库的设计和操作中,我们通常会给表建立主键。
2. 介绍
主键,可以分为自然主键和代理主键。
自然主键表示:采用具有业务逻辑含义的字段作为表的主键。比如在用户信息表中,采用用户的身份证号码作为主键。但是这样一来,随着业务逻辑的变化,主键就有可能要更改。比如,假设哪天身份证号码升级成19,2位,那。。。。。。。代理主键:在表中人为的增加一个字段,该字段并没有表示任何的业务逻辑,仅仅用来标识一行数据。比如说在用户信息表中,增加一个用户ID的字段。用来表示该条用户信息的记录。
通常情况下,用的比较多的是代理主键的形式。而且,我们习惯于于让该主键字段能够自动增长,来保证其唯一性。但是,不同的数据库自动增长的方式并不是相同的。如在SQLSERVER中,用identity,MYSQL中,有increment,ORACLE中通常采用sequence。这样一来,在数据库的主键列操作上,便会显得比较麻烦。
3. Hibernate的ID策略
但是在Hibernate中,提供了主键生成策略。下面是比较常用的几种:3.1:assigned
----表示在新增数据时由应用程序指定主键的值。主要针对主键是采用自然主键的形式。这种方式,适用于主键列不是自动增长列。其缺点为在执行新增操作时,需查询数据库判断生成的主键是否已经存在。
3.2:increment
----表示新增数据操作时由hibernate自动生成主键值。其生成的值为:先查询该主键列的最大值,然后在最大值的基础上加上1.适用于采用代理主键形式的主键列。同样不能用于主键列是自动增长的表。但是,该主键生成策略也有些缺点。(1)新增数据前先查询一遍,影响了性能。
(2)主键的类型只能为数值型的int或者long
(3)并发操作时的冲突问题。
3.3:identity
----不如说是为sqlerver数据库量身定做的。主要适用于sqlserver数据库的自动增长列的表。3.4:native
----表示根据不同的数据库采用不同的主键生成策略。比如,当前数据库为sqlserver,则会采用identity,如为oracle,则采用 oracle中的sequence等。区分数据库的不同是以hibernate主配置文件中sessionFactory中配置的数据库方言。3.5.uuid
* 唯一主键生成办法。从Hibernate中提取出来优点:避免了生成ID 时,与数据库的再次交道,性能上较高。但对于有的开发人员不太习惯这种id生成方式,UUID生成的32为的字符串,不同于identity 从1开始的整数。
4. Xml代码
<span style="font-size:24px;"><id name="实体类属性名" type="java.lang.Integer"> <column name="对应表中主键字段名" /> <generator class="assiged|increment|identity|native|........" /> </id> </span>
5. 结语
采用hibernate的主键生成策略,就可以比较灵活和方便的对表中的主键字段进行操作了。而且,不同的数据库,不同的主键形式,也只需要修改下映射文件就可以了。
原文链接: http://lqzit.iteye.com/blog/845163
0 0
- Hibernate的主键声称策略
- hibernate的主键策略
- hibernate主键的生成策略
- Hibernate的主键生成策略
- hibernate的主键生成策略
- Hibernate的主键生成策略
- hibernate的主键生成策略
- hibernate的主键生成策略
- Hibernate主键的增长策略
- hibernate的主键生成策略
- Hibernate主键的生成策略
- Hibernate的主键生成策略
- hibernate的主键生成策略
- Hibernate的主键生成策略
- hibernate的主键生成策略
- Hibernate的主键生成策略
- Hibernate的主键生成策略
- Hibernate的主键生成策略
- Android中Gallery和ImageSwitcher的使用
- SQLite数据库操作
- 那个和你一起吃路边摊的姑娘为什么没有陪你走到最后
- iOS多线程编程NSThread的使用
- 3.2-6
- Hibernate的主键声称策略
- Eclipse中设置花括号对齐到下一行的方法
- Eclipse中使用Maven常用的依赖以及错误
- JAVA虚拟机垃圾回收机制
- Android实战简易教程-第二枪(Spinner下拉级联效果)
- [Android] Android开发优化之——使用软引用和弱引用
- 百度地图最新版本sdk使用系列(八)-获取当前地图中心点的经纬度并计算与当前位置的距离
- [MFC]画线
- Haskell小白初探——Haskell 安装(ubuntu12.04)