-
hibernate主键生成器的选择5
用mysql做数据库,做数据表时把主键设为auto-increment时,hibernate的映射文件*.hbm.xml中主键的生成策略为increment、identity、native时都可以把数据保存进去,那么此时这三种策略如何选择??如果数据表的主键没有设为auto-increment时,只有increment这种策略可以保存进去数据,做开发时要如何选择这几种策略呢?2014年7月29日 21:09
2个答案 按时间排序 按投票排序
-
hibernate 主键生成器总结
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根据底层数据库自行判断用hilo,identity,sequence中的一中主键生成方式。
8。uuid.hex
由hibernate 128位唯一值产生算法生成16进制数值(编码后以长度32的字符串表示)作为主键。
9。uuid.string
与uuid.hex相似,只是生成的主键未进行编码(长度16),在某些数据库中可能出现问题(Postgresql)。
10。foreign
适用外部表的字段作为主键。
如果主键字段为自增类型,
那么对应的.hbm.xml文件中的id字段的xml声明,
应该这么写:
<generator class=”native” />
例如:
<id
column=”user_id”
name=”Id”
type=”integer”
>
<generator class=”native” />
</id>
其实这个native并非实际的类型,而是hiberante根据
当前使用的数据库,自动使用对应的类型。
例如:如果sqlserver,native就对应identity
native(本地)
根据底层数据库的能力选择identity, sequence 或者hilo中的一个。
如果主键字段不设置为自增,但是是int型的,
可以使用increment,由hibernate产生主键。
<generator class=”increment” />
不过这种方法,对于并发量大的应用,似乎最好不要采用。
见hiberante参考:
increment(递增)
用于为long, short或者int类型生成唯一标识。只有在没有其他进程往同一张表中插入数据时才能使用。
在集群下不要使用。
如果使用uuid.hex产生的随机32位数最为主键,
那么数据库的id字段类型为char,长度为32
hbm.xml中写为: <generator class=”uuid.hex” />
另外,uuid.string也是功能类似。
uuid.hex产生的是32位的16进制数字的字符串。
而uuid.string产生的是16个字符长的任意ASCII字符组成的字符串
uuid.hex
用一个128-bit的UUID算法生成字符串类型的标识符。在一个网络中唯一(使用了IP地址)。UUID被编
码为一个32位16进制数字的字符串。
uuid.string
使用同样的UUID算法。UUID被编码为一个16个字符长的任意ASCII字符组成的字符串。不能使用
在PostgreSQL数据库中
摘至:http://blog.sina.com.cn/s/blog_6f1361e501010ou7.html
在做项目的时候选择哪种不是程序员能左右的 我们只能提提想法 走走过场而已2014年7月30日 12:02
-
1、自动增长identity
适用于MySQL、DB2、MS SQL Server,采用数据库生成的主键,用于为long、short、int类型生成唯一标识
使用SQL Server 和 MySQL 的自增字段,这个方法不能放到 Oracle 中,Oracle 不支持自增字段,要设定sequence(MySQL 和 SQL Server 中很常用)
数据库中的语法如下:
MySQL:create table t_user(id int auto_increment primary key, name varchar(20));
SQL Server:create table t_user(id int identity(1,1) primary key, name varchar(20));
<id name="id" column="id" type="long">
<generator class="identity" />
</id>
2.native
会根据底层数据库的能力,从identity、sequence、hilo中选择一个,灵活性更强,但此时,如果选择sequence或者hilo,则所有的表的主键都会从Hibernate默认的sequence或者hilo表中取。并且,有的数据库对于默认情况主键生成测试的支持,效率并不是很高
对于 oracle 采用 Sequence 方式,对于MySQL 和 SQL Server 采用identity(自增主键生成机制),native就是将主键的生成工作交由数据库完成,hibernate不管(很常用)
<id name="id" column="id">
<generator class="native" />
</id>
3.increment
这个是由Hibernate在内存中生成主键,每次增量为1,不依赖于底层的数据库,因此所有的数据库都可以使用,但问题也随之而来,由于是Hibernate生成的,所以只
能有一个Hibernate应用进程访问数据库,否则就会产生主键冲突,不能在集群情况下使用
插入数据的时候hibernate会给主键添加一个自增的主键,但是一个hibernate实例就维护一个计数器,所以在多个实例运行的时候不能使用这个方法
<id name="id" column="id">
<generator class="increment" />
</id>
2014年7月29日 21:53
相关推荐
以下是对Hibernate主键生成策略的详细说明: 1. **assigned**: 这种策略要求用户在调用`save()`方法之前手动设置主键值。Hibernate不参与主键的生成,这意味着主键生成完全由应用控制,可以与数据库无关。这种...
以上就是Hibernate主键生成的常见策略,每种策略都有其适用的场景。在实际开发中,应根据数据库类型和需求选择合适的主键生成策略,确保数据的一致性和完整性。理解并正确配置这些策略,将有助于提高程序的稳定性和...
主键生成器确保了每个记录都有一个独一无二的标识,这对于数据的完整性至关重要。以下是Hibernate中常见的主键生成方式及其特点: 1. **increment**:此策略对long、short或int类型的字段生成自动增长的主键。主键...
Hibernate通过`org.hibernate.id.SequenceGenerator`类来实现序列主键生成器。在`nextValue()`方法中,它会与数据库进行交互,获取序列的下一个值。这个过程涉及到JDBC操作,包括SQL的执行和结果的处理。 3. **...
4. Native 标识符生成器:这是一种灵活的策略,Hibernate 会根据底层数据库的特性自动选择合适的生成器,可能是 `identity`、`sequence` 或 `hilo`。这种方式适应性强,但在某些情况下可能无法达到最优性能,因为它...
总的来说,选择合适的主键生成策略和正确配置是Hibernate成功集成到项目的关键步骤。理解这些策略的差异以及它们如何与不同数据库交互,将有助于优化性能并避免潜在的问题。在实际开发中,应根据项目需求和所使用的...
标题中的“hibernate的映射表生成器”是一个图形用户界面(GUI)工具,专门设计用于帮助开发者自动生成数据表,其基于对象模型(po)和映射文件(XML文件)。这个工具的出现,极大地提高了开发效率,减少了手动创建...
3. **注解**:如`@Entity`表示这是一个Hibernate实体,`@Table`指定对应数据库中的表名,`@Id`标识主键,`@GeneratedValue`处理主键生成策略。 除了实体类,生成器还会自动生成对应的Hibernate映射文件(.hbm.xml)...
JPA通过`@GeneratedValue`注解来指定主键生成策略,提供了多种灵活的方案供开发者选择。 #### 二、单字段主键类型生成策略 在JPA中,单字段主键类型的生成策略主要包括以下四种: 1. **AUTO(自动自增生成)** ...
了解并正确选择主键生成策略对于JPA应用程序的性能和可扩展性至关重要。在实际开发中,应根据项目需求和数据库特性来确定合适的策略。 综上所述,这个压缩包提供的教程详细讲解了JPA的基本概念,以及如何通过实例...
2. **选择生成工具**:有很多工具可以选择,例如Hibernate Tools,它集成了在Eclipse或IntelliJ IDEA等IDE中的插件,可以直接使用。 3. **连接数据库**:配置好数据库连接,让工具能够读取数据库中的表信息。 4. **...
自动生成的Entity类通常包含属性(对应表的字段)和getter/setter方法,有时还会包含一些特定的Hibernate注解,如@Id(主键)和@GeneratedValue(主键生成策略)。 2. **映射文件(Mapping Files)**:在传统的...
1. **Hibernate Tools**:这是一个用于增强Hibernate功能的工具集,它提供了包括反向工程、代码生成、JPA工具和HQL编辑器等多种功能。在本例中,`hibernate自动生成数据库文件.exe`可能是Hibernate Tools的一个实现...
在Hibernate中,我们可以通过定义主键生成策略来实现UUID的使用。具体做法是在实体类的主键字段上使用`@GeneratedValue`和`@GenericGenerator`注解: ```java import javax.persistence.Entity; import javax....
而MyEclipse作为一款强大的Java集成开发环境,提供了对Hibernate的良好支持,包括自动生成Hibernate映射文件的功能。本文将详细介绍如何在MyEclipse中创建和使用Hibernate映射文件。 首先,理解Hibernate映射文件...
【标签】:“源码”和“工具”表明这篇内容可能涉及到具体的代码实现和辅助开发的工具,可能是通过某种代码生成器或者IDE插件来实现映射文件的自动化创建。 【压缩包子文件的文件名称列表】:“hibernate映射文件...
6. **第三方库**:在编程语言层面,有许多库和框架提供了主键生成的功能,如Java的Hibernate或Spring框架,它们可以与数据库交互,自动处理主键生成。 使用"SQL主键产生器"工具的优点在于,它可以帮助开发者避免...
- **hibernate 主键生成器解释.doc**:详细解释了Hibernate中的主键生成策略。 - **Eclipse配置Hibernate.doc**:指导如何在Eclipse集成开发环境中配置和使用Hibernate。 综上所述,这个压缩包包含了Hibernate的...
7. **使用方式**:实体类生成器可以是命令行工具、IDE插件或者Web服务的形式,开发者输入数据库连接信息和选择要生成的表,点击生成按钮即可。 8. **版本控制集成**:对于团队开发,生成的代码应该纳入版本控制系统...
这款代码生成器的特点在于其易于操作和内置的中文语言支持,使得国内开发者也能无障碍地使用。在Windows 7环境下运行良好,意味着它对系统资源的要求不高,兼容性较强,适合各种开发环境。 使用...