hibernate 的主键生成策略有三种,序列,自增,通用三种方式。
序列:(只有在oracle 和DB2中支持)
<id name="id" column="id">
<generator class="sequence">
<param name="sequence">在数据库中创建的squence的名字</param>
</generator>
</id>
自增:(只支持mysql 和sqlserver)
在建表的时候设置 auto_increment 属性
<id column name="friend_id" length="10">
<generator class="identity"/>
</id>
通用:mysql不适用
如果是oracle,序列名字一定要用hibernate_sequence
<id column name="friend_id" length="10">
<generator class="native"/>
</id>
----------------------------------------------------
使用其它策略的方法基本一致,例如hilo、seqhilo等 Generator 为每个 POJO 的实例提供唯一标识。
一般情况,我们使用“native”。class 表示采用由生成器接口net.sf.hibernate.id.IdentifierGenerator 实现的某个实例,其中包括:
◆“assigned” 主键由外部程序负责生成,在 save() 之前指定一个。
◆“hilo” 通过hi/lo 算法实现的主键生成机制,需要额外的数据库表或字段提供高位值来源。
◆“seqhilo” 与hilo 类似,通过hi/lo 算法实现的主键生成机制,需要数据库中的 Sequence,适用于支持 Sequence 的数据库,如Oracle。
◆“increment” 主键按数值顺序递增。此方式的实现机制为在当前应用实例中维持一个变量,以保存着当前的最大值,之后每次需要生成主键的时候将此值加1作为主键。这种方式可能产生的问题是:不能在集群下使用。
◆“identity” 采用数据库提供的主键生成机制。如DB2、SQL Server、MySQL 中的主键生成机制。
◆“sequence” 采用数据库提供的 sequence 机制生成主键。如 Oralce 中的Sequence。
◆“native” 由Hibernate自增主键根据使用的数据库自行判断采用 identity、hilo、sequence 其中一种作为主键生成方式。
◆“uuid.hex” 由Hibernate自增主键基于128 位 UUID 算法 生成16 进制数值(编码后以长度32 的字符串表示)作为主键。
◆“uuid.string” 与uuid.hex 类似,只是生成的主键未进行编码(长度16),不能应用在 PostgreSQL 数据库中。
◆“foreign” 使用另外一个相关联的对象的标识符作为主键。
分享到:
相关推荐
例如,`@Entity`用于标记一个类为实体,`@Table`定义实体对应的数据库表,`@Id`标识实体的主键,`@GeneratedValue`管理主键生成策略等。使用注解可以使代码更加简洁且易于维护。 **Apache Log4j** Log4j是Apache的...
本文将深入探讨Hibernate中几种常用的主键生成策略,并分析各自的优缺点及适用场景。 #### 1. Assigned(显式赋值) **简介:** Assigned策略允许开发人员在保存对象到数据库之前手动指定主键值。这种方式下,...
3. 主键生成策略:了解Hibernate的几种主键生成策略,如identity、sequence、increment等。 4. 查询操作:使用HQL进行简单和复杂的查询,了解投影、分组、排序等操作。 5. 异常体系:理解Hibernate的异常体系,如...
这些映射包含了字段到列、主键生成策略等信息。 4. **会话(Session)**:Hibernate的会话是与数据库交互的主要接口,用于管理对象的状态。它提供了一种事务性的边界,并且可以实现透明的缓存。 5. **查询语言...
5. **主键生成策略(Identifier Generator)**:Hibernate 提供了多种主键生成策略,如.AUTO(自增)、SEQUENCE(序列)、UUID(全局唯一标识符)等,开发者可以根据数据库特性选择合适的策略。 6. **Session接口**...
- `@GeneratedValue`: 控制主键的生成策略,如自增、UUID等。 - `@Column`: 定义字段与数据库列的映射,可设置长度、是否允许为空等属性。 - `@OneToMany`, `@ManyToOne`, `@OneToOne`, `@ManyToMany`: 描述实体...
- **@GenericGenerator**:配合`@GeneratedValue`使用,允许自定义主键生成策略。例如,使用UUID作为主键时,可以通过`@GenericGenerator(name="system-uuid",strategy="uuid")`和`@GeneratedValue(generator=...
Hibernate支持多种主键生成策略,如`GenerationType.AUTO`(默认,由数据库自动生成)、`GenerationType.IDENTITY`(类似自增列)等。 4. **SessionFactory与Session**:SessionFactory是线程安全的,用于创建...
4. **持久化类和标识符**:每个实体类都有一个唯一的标识符,通常通过`@Id`和`@GeneratedValue`注解指定,表示主键生成策略。 5. **Session和Transaction**:`Session`是Hibernate的主要工作单元,负责对象的持久化...
注解方式则是在实体类上直接添加特定的注解,比如`@Entity`表示这是一个实体类,`@Table`指定对应的数据库表,`@Id`标记主键字段,以及`@GeneratedValue`定义主键生成策略等。 Hibernate的基础配置主要包括以下几...
类的属性与表的列建立映射,@Id注解标识主键,其他字段如@IdClass、@GeneratedValue等可以用来定义主键生成策略。 4. **会话工厂与会话** Hibernate的核心接口之一是SessionFactory,它负责创建Session对象。...
例如,`@Entity`注解标记一个Java类为实体,`@Table`指定对应的数据库表,`@Id`定义主键,`@GeneratedValue`处理主键生成策略。 5. **Criteria API** 和 **HQL (Hibernate Query Language)**:这两种查询方式提供了...
2. **主键生成策略**:支持多种主键生成方式,如自增(Identity)、序列(Sequence)、高/低算法(Hi/Lo Algorithm)、UUID算法等。 3. **复合主键**:当需要使用多个字段作为主键时,可以使用composite-id元素。 4....
Hibernate提供了多种主键生成策略,如`GenerationType.AUTO`(通常由数据库自动生成),`GenerationType.IDENTITY`(依赖于数据库的自动增长字段)等。 5. **SessionFactory与Session**:SessionFactory是线程安全...
除了使用序列(sequence)生成标识符之外,Hibernate还提供了其他几种常见的标识符生成策略: 1. **Identity**: 这种策略依赖于底层数据库的自动增长机制。例如,在MySQL中,可以通过在表的主键列上使用`AUTO_...
3. **ID生成策略**:Hibernate提供了多种主键生成策略,如`@GeneratedValue`注解,可以根据需求选择自动递增、UUID等方式生成主键。 4. **持久化类的属性映射(Annotations)**:使用注解如`@Id`、`@Column`、`@...
例如,`@Entity`标识一个类为实体,`@Table`指定对应的数据库表,`@Id`标记主键,`@GeneratedValue`定义主键生成策略。 3. **继承映射** Hibernate支持单表继承、联合继承和多表继承等多种继承映射策略。在单表...
同时,还可以使用`@Id`注解来标识主键字段,`@GeneratedValue`注解来定义主键生成策略。 3. **持久化映射文件(Mapping)**:传统上,Hibernate使用XML文件(如`*.hbm.xml`)来描述实体类和数据库表之间的映射关系...
- **strategy**:主键生成策略,主要有以下几种: - **AUTO**:让ORM框架自动选择。 - **IDENTITY**:根据数据库的自增字段生成。 - **SEQUENCE**:根据数据库的序列生成。 - **TABLE**:使用一个特定的表来...