主键增长策略
对象标识符(OID object id)
从表的角度看,OID对应表的主键。从类的角度看OID对应类的主键属性.
increment:
由Hibernate自动以递增方式生成标识符,每次增量为1。
select max(id) from Student
优点:不依赖于底层数据库系统,适用于所有的数据库系统。
缺点:适用于单进程环境下,在多线程环境下很可能生成相同主键值,而且OID必须为数值类型,比如long,int,short类型
配置方式:
<id name=“id” type=”long” column=”ID”>
<generator class=”increment”/>
</id>
identity:
自增,每次增长1, 适用于支持identity的数据(mysql,sql server), 主键类型是数值
sequence:
依赖于底层数据库系统的序列
前提条件:需要数据库支持序列机制(如:oracle等),而且OID必须为数值类型,比如long,int,short类型。
配置文件:
<id name=”id” type=”java.lang.Long” column=”ID”>
<generator class=”sequence”>
<param name=”sequence”>my_seq</param>
</generator>
</id>
native:
会根据数据类型来选择,使用identity,sequence ,hilo
select hibernate_sequence.nextval from dual
主键类型是数值long , short ,int
<id name="id" type="java.lang.Integer">
<generator class="native"/>
</id>
hilo:
hilo标识符生成器由Hibernate按照一种high/low算法生成标识符,他从数据库中的特定表的字段中获取high值,因此需要额外的数据库表保存主键生成的历史状态,hilo生成方法不依赖于底层数据库,因此适用于每一种数据库,但是OID必须为数值类型(long,int,shor类型)。
用法:
<id name=”id” type=”java.lang.Integer” column=”ID”>
<generator class=”hilo”>
<param name=”table”>my_hi_value</param>
<param name=”column”>next_value</param>
</generator>
</id>
uuid:
会根据uuid算法,生成128-bit的字串
主键属性类型不能是数值型,而是字串型
assigned:
用户自己设置主键值,所以主键属性类型可以是数值,字串
映射复合主键
foreign :
在one-to-one的关系中,有另一张表的主键(Person) 来决定 自己主键/外键( IdCard)
给出一个简单原则:
针对oracle [主键是int/long/short 建议使用 sequence] 主键是String 使用uuid或者assinged
针对 mysql [主键是 int/long/short 建议使用increment/assigend ,如果是字串 UUId/assigned]
针对 sql server [主键是 int/long/short 建议使用 identity/native/assinged ,如果主键是字串,使用uuid/assigned ]
one-to-one 又是基于主键的则使用foreign
hibernate最佳实践(在什么项目中使用最好)
对于数据量大,性能要求高系统,不太使用使用hiberante.
主要用于事务操作比较多的项目(oa/某个行业软件[石油、税务、crm, 财务系统.]
不适合OLAP(On-Line Analytical Processing联机分析处理),以查询分析数据为主的系统;
适合OLTP(on-line transaction processing联机事务处理)
olap->hibernate用的比较少 oltp->hibernate
分享到:
相关推荐
【hibernate主键生成策略】是Hibernate框架中用于生成持久化对象主键的重要机制,它决定了如何在数据库中创建唯一的标识符。在SSH(Spring、Struts、Hibernate)架构中,Hibernate作为持久层框架,主键生成策略的...
### 常用Hibernate主键生成策略详解 #### 一、引言 在数据库设计与操作过程中,主键是确保数据唯一性的关键要素之一。在实际应用中,开发者经常需要处理不同类型的数据库,并且需要应对各种不同的主键生成需求。...
以下是对Hibernate主键生成策略的详细说明: 1. **assigned**: 这种策略要求用户在调用`save()`方法之前手动设置主键值。Hibernate不参与主键的生成,这意味着主键生成完全由应用控制,可以与数据库无关。这种...
以上就是Hibernate主键生成的常见策略,每种策略都有其适用的场景。在实际开发中,应根据数据库类型和需求选择合适的主键生成策略,确保数据的一致性和完整性。理解并正确配置这些策略,将有助于提高程序的稳定性和...
以下是关于Hibernate主键生成方式的详细说明: 1. **Identity方式**:`<generator class="identity"/>` 这种方式依赖于数据库自身的自动增长机制。例如,在MySQL中,它可以与`AUTO_INCREMENT`属性配合使用。当...
### Hibernate主键生成策略 #### 一、概述 在Hibernate框架中,主键生成策略是对象持久化过程中不可或缺的一部分。合理的主键生成机制不仅能够确保数据的唯一性,还能够提高系统的性能和可扩展性。本文将详细介绍...
### Hibernate主键生成策略 1. **`native`**:类似于JPA的`GenerationType.AUTO`,根据底层数据库选择合适的生成策略。 2. **`identity`**:相当于JPA的`GenerationType.IDENTITY`,适合自动增长主键的数据库。 3...
综上所述,Hibernate提供了丰富的主键生成策略,涵盖了从简单的自动增长到复杂的分布式唯一ID生成。开发者应根据具体的应用需求和数据库特性,选择最合适的主键生成策略,以确保系统的稳定性和性能。无论是追求高...
Hibernate主键生成策略详细介绍 在Java探索中,Hibernate提供了多种主键生成策略,满足不同场景下的需求。下面是对Hibernate主键生成策略的详细介绍: 1. Increment主键生成策略 Increment主键生成策略是由...
- **概述**:`AUTO`是最常用的主键生成策略之一,也是JPA默认采用的方式。当使用该策略时,JPA会根据后端数据库的不同特性自动选择合适的主键生成方式。例如,在MySQL中,如果表的主键是自增字段,则使用数据库自身...
* Native:Hibernate 会根据数据库的不同,选择合适的主键的生成策略 Sequence * 是 oracle 内部特有的内容,相当于 uuid,所以是字符串类型对象 对象的状态 * 临时状态 * 持久化状态 * 脱管状态 案例 1. 说明...
1. **GenerationType.IDENTITY**: 这种策略依赖于数据库自增字段,适用于MySQL、SQL Server等支持自动增长的数据库。 2. **GenerationType.AUTO**: 这是默认策略,具体实现取决于所使用的JPA提供商,如Hibernate。...
在Java持久化框架Hibernate中,主键生成策略是至关重要的,因为它决定了如何为数据库表的记录生成唯一的标识符。主键生成器确保了每个记录都有一个独一无二的标识,这对于数据的完整性至关重要。以下是Hibernate中...
综上所述,Hibernate 通过其核心接口和主键策略,提供了一套完整的 ORM 解决方案,简化了数据库操作,提升了开发效率。学习 Hibernate,理解并掌握这些核心概念,对于构建高效、可扩展的 Java 应用程序至关重要。...
以下是对Hibernate主键类型及其配置的详细说明: 1. **uuid.hex**: 这种生成器使用128位算法生成一个32位的字符串。由于其通用性,它适用于所有类型的数据库。在`.hbm.xml`映射文件中,你可以这样配置: ```xml ...
3. **主键自增**:Hibernate提供了多种主键生成策略,包括自动增长(Identity)、序列(Sequence)等,这些策略确保了每个新创建的对象都有一个唯一的标识。 4. **查询操作**:这包括了HQL(Hibernate Query ...