Hibernate允许把OID定义为short,int,long以及他们的包装类型。
Hibernate的内置标识符有以下几种:
increment |
适用于逻辑主键.由hibernate自动以递增方式生成. |
identity |
适用于逻辑主键.由底层数据库生成标识符. |
sequence |
适用于逻辑主键.hibernate根据底层数据库的序列生成标识符,这要求底层数据库支持序列. |
hilo |
适用于逻辑主键.hibernate通过high/low算法生成标识符. |
seqhilo |
适用于逻辑主键.使用一个高低位算法来高效地生成long,short,或者int类型的标识符. |
native |
适用于逻辑主键.根据底层数据库对自动生成标识符的方式,自动选择identity,sequence,hilo. |
uuid.hex |
适用于逻辑主键.hibernate采用128位的uuid算法生成标识符 |
uuid.string |
适用于逻辑主键.使用和uuid.hex同样的算法,uuid被编码成一个16字符长的字符串.不能使用在PostreSQL数据库中. |
assigned |
适用于业务主键.由java应用程序负责生成标识符. |
foreign |
适用于逻辑主键.使用另外一个相关联的对象的标识符 |
下面详细介绍几种常用的生成器。
1)Increment标识符生成器
HIbernate会以自增的方式生成标识符,事实上是在hibernate的初始化阶段读取将要操作的表中的最大的ID(select max(ID) from tableName),在向数据库中插入记录时再在此基础上递增。
这样就会存在并发的问题:如果同时有两个hibernate进程读取了这个最大值(假设为100),在向数据库中插入数据的时候都会想插入ID为101的记录,这样就违反了数据库的约束。这个问题只要是存在两个sessionFacotry就会发生,不能在集群下使用。
优点:生成标识符的机制不依赖于底层数据库,适用于所有的数据库系统。
2)Identity标识符生成器
identity标识符生成器由底层数据库来负责生成标识符,它要求底层数据库把主键定义为自动增长字段类型,比如在MySql中应为auto_increment,SQL Server中为identity。
优缺点:必须依赖于底层数据库。
3)sequence标识符生成器
sequence标识符生成器利用底层数据库提供的序列来生成标识符(需要在数据库中创建一个序列)。
4)Native标识符生成器
native标识符生成器依据底层数据库对自动生成标识符的支持能力,来选择适用identity,sequence,hilo标识符生成器。native能自动判读底层数据库提供的生成符机制,如果为MySQL和SQL Server为identity,如果数据库为Oracle则为sequence。
5)assigned标识符生成器
由程序指定OID。
分享到:
相关推荐
#### Hibernate内置标识符生成器 标识符生成器负责生成实体对象的主键值。Hibernate提供了多种内置的标识符生成策略,例如`increment`(递增)、`identity`(数据库自增)和`sequence`(序列)等。 #### ...
本章主要介绍关系数据库中的代理主键(不具有业务含义),接着介绍Hibernate提供的几种内置标识符生成器的用法及适用范围。 6.1 关系数据库按主键区分不同的记录 123 6.1.1 把主键定义为自动增长标识符类型 123 ...
本章主要介绍关系数据库中的代理主键(不具有业务含义),接着介绍Hibernate提供的几种内置标识符生成器的用法及适用范围。 6.1 关系数据库按主键区分不同的记录 123 6.1.1 把主键定义为自动增长标识符类型 123 ...
Hibernate提供了一系列内置的标识符生成策略,其中有些只适用于特定类型的数据库。最常见的标识符生成方式是使用自动递增序列号。对于某些类型的数据库(如HSQLDB),可以使用序列/生成器来生成这个序列号。这种策略...
6.4 Hibernate的内置标识符生成器的用法 6.4.1 increment标识符生成器 6.4.2 identity标识符生成器 6.4.3 sequence标识符生成器 6.4.4 hilo标识符生成器 6.4.5 native标识符生成器 6.5 映射自然主键 ...
6.4 Hibernate的内置标识符生成器的用法 6.4.1 increment标识符生成器 6.4.2 identity标识符生成器 6.4.3 sequence标识符生成器 6.4.4 hilo标识符生成器 6.4.5 native标识符生成器 6.5 映射自然主键 ...
6.4 Hibernate的内置标识符生成器的用法 6.4.1 increment标识符生成器 6.4.2 identity标识符生成器 6.4.3 sequence标识符生成器 6.4.4 hilo标识符生成器 6.4.5 native标识符生成器 6.5 映射自然主键 ...
6.4 Hibernate的内置标识符生成器的用法 6.4.1 increment标识符生成器 6.4.2 identity标识符生成器 6.4.3 sequence标识符生成器 6.4.4 hilo标识符生成器 6.4.5 native标识符生成器 6.5 映射自然主键 ...
Hibernate支持多种内置的标识符生成器,如`increment`、`native`、`sequence`等,可以根据数据库系统选择合适的生成策略。`type`属性的值可以是Hibernate预定义的类型,如`string`、`int`,它们对应Java的String和...
#### Hibernate标识符生成器 Hibernate提供了多种内置的标识符生成策略,用于处理主键的生成: - **increment**: 自动递增策略,适用于代理主键,每次增加1,仅限于`long`, `int`, `short`类型。 - **identity**: ...
Hibernate验证器是用于校验实体对象的有效性的一种机制,它可以通过注解的方式来定义实体上的约束条件。 - **约束**: - 内置约束:如`@NotNull`、`@Size`等。 - 自定义约束:可以通过实现`ConstraintValidator`...
- **4.1.2 内建约束**:Hibernate 验证器内置了一些常见的约束注解,如 `@NotNull`、`@Size` 等。 - **4.1.3 错误信息**:可以通过 `@Constraint` 注解的 `message` 属性来定义约束违反时的错误消息。 - **4.1.4 ...
除了内置的主键生成策略,开发者还可以通过扩展Hibernate的类来自定义主键生成器。这允许更灵活地控制主键的生成逻辑,满足特定业务场景的需求。具体实现细节可参考相关文档或社区资源。 总之,Hibernate映射文件的...
- 掌握id的内置生成器。 #### 2.2 映射元素 - **映射文件组成**:包括类映射、属性映射等。 - **常用元素**: - `<class>`:表示映射到数据库表的Java类。 - `<id>`:表示主键字段的映射。 - `<property>`:表示...
如果这个生成器实例需要某些配置值或者初始化参数,可以使用 `<param>` 元素来传递这些参数。 Hibernate 提供了多种内置的 generator 实现,每种实现都有其特点和用途。下面是一些内置 generator 的快捷名字: * ...
- **5.1.4.6 触发器实现的主键生成器**:利用数据库触发器自动生成主键。 - **5.1.5 composite-id**:复合主键的映射。 - **5.1.6 鉴别器**:用于多态继承时区分具体子类。 - **5.1.7 版本**:乐观锁机制,防止...
- **生成器**:配置主键的生成策略。 - **Hi/Lo 算法**:一种简单高效的主键生成算法。 - **UUID 算法**:使用通用唯一标识符作为主键。 - **自动增长列和序列**:利用数据库本身的特性生成主键值。 - **分配...
事务处理是数据持久化过程中不可或缺的部分,Hibernate提供了内置的事务管理机制,允许开发者在Session和事务范围内执行数据操作。此外,Hibernate还支持乐观并发控制和悲观锁,以确保在多用户环境中数据的一致性和...
**:Hibernate Validator 提供了一套内置的约束注解,用于验证实体对象的状态。 - **内建约束**:如 `@NotNull`, `@Size`, `@Pattern` 等。 - **错误信息**:可以通过 `message` 属性来自定义验证失败时显示的消息...