学过hibernate的都知道hibernate支持n种主键生成策略。但有一种比较诡异,就是sequence。众所周知,oracle 表的主键生成策略是没有自增(identity或者autoIncrement)的,他是通过 sequence 来实现的。而mysql正好与oracle相反,mysql支持自增,恰好不支持 sequence。如果想要在mysql上应用sequence主键生成策略那就悲剧了。
但是天无绝人之路,问题总是有办法解决的。hibernate为我们提供了其他的解决办法。像一般,我们配置sequence的主键生成策略是这样的:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.example.entity">
<class name="Foo">
<id name="id">
<generator class="sequence"></generator>
</id>
</class>
</hibernate-mapping>
但上面的配置在mysql下是行不通的,如果要适应mysql,需要做将配置改为:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.example.entity">
<class name="Foo">
<id name="id">
<generator class="org.hibernate.id.enhanced.SequenceStyleGenerator">
<!--初始值,默认是1-->
<param name="initial_value">1000</param>
<!--自增大小,默认是1-->
<param name="increment_siz">1</param>
<!--sequence的名字,默认是"hibernate_sequence"-->
<param name="sequence_name">hibernate_sequence</param>
</generator>
</id>
</class>
</hibernate-mapping>
(以上配置是我在hibernate 3.6.1 上完成的)
分享到:
相关推荐
Identity是另一种常见的主键生成策略,由数据库自身负责管理,每当插入一条新记录时,会自动为该字段分配下一个可用的唯一值。在Hibernate中,只需要简单地配置`<generator class="identity"/>`即可启用。Identity...
一种优化的主键生成方式,使用较小的整数范围(高位数)和数据库表中的行(低位数)来生成主键,减少对数据库的访问。使用`<generator class="hilo">`。 理解并正确选择主键生成策略对于优化数据库性能、保证数据...
- **简介**:`identity` 策略利用 SQL Server 或 MySQL 中的自增字段特性生成主键。 - **应用场景**:适用于 SQL Server 和 MySQL 数据库。 - **特点**: - 实现简单,无需额外配置。 - Oracle 不支持自增字段,...
- **定义**:利用数据库自身的自动增长字段特性来生成主键。 - **支持的数据库**:SQL Server, MySQL等。 - **优点**: - 简单高效,性能优秀。 - **缺点**: - 不适用于所有数据库类型,比如Oracle就不支持自动...
在Hibernate框架中,提供了多种主键生成策略,每种策略都有其适用场景。本文将详细介绍这些生成策略,并给出相应的应用场景分析。 #### 二、主键生成策略 1. **assigned** - **定义**:这种方式由程序员负责分配...
4. **`hilo`**:HiLo算法,通过高位和低位值组合生成主键,减少对数据库的访问。 5. **`assigned`**:主键由应用程序指定,Hibernate不负责生成。 6. **`increment`**:在内存中递增主键值,不依赖数据库,适用...
综上所述,Hibernate提供了丰富的特性来支持各种数据库操作需求,包括不同的加载策略、自动同步机制以及多种主键生成策略等。理解并合理利用这些特性可以帮助开发者构建高性能且易于维护的应用系统。
### Hibernate知识点概述 #### 一、Hibernate框架简介 ...在实际项目开发中,合理利用Hibernate的各种特性,可以有效解决数据库操作的复杂性和重复性问题,使开发人员更加专注于业务逻辑的实现。
在 Hibernate 中,`generator` 属性是用于指定如何生成实体类的唯一标识(通常为主键)的一种机制。这个属性可以配置在 `hibernate.hbm.xml` 文件中的 `<id>` 标签内,它允许你选择不同的策略来生成 ID。 1. **...
- **sequence**: 使用数据库中的序列生成主键,适用于Oracle数据库。 - **identity**: 使用数据库的自增长字段生成主键,适用于SQL Server等数据库。 - **native**: 根据使用的底层数据库自动选择最合适的生成策略。...
事务管理是Hibernate中另一个关键的概念。事务的边界通常由开发人员界定,比如通过`beginTransaction()`开始一个事务,`commit()`提交事务,以及在必要时使用`rollback()`回滚事务。在使用`getCurrentSession()`时,...
- **SEQUENCE**:适用于 Oracle 数据库,使用序列来生成主键。 - **TABLE**:使用单独的表来存储主键。 - **联合主键**:当一个实体类的多个属性共同构成主键时,可以使用联合主键。XML 和 Annotatation 方式均可...
大部分OLTP应用系统到最后都不免要使用SQL/JPQL,然而没有一个很好的方法解决SQL在多种数据库下兼容性的问题。 EF-ORM中采用了独特的SQL解析和改写技术,能够主动检查并确保SQL语句或者SQL片段在各个数据库上的兼容...
5. **Java数据对象(JDO)**:另一种ORM标准,提供对象持久化服务。 6. **EJB 2.X**:早期的Java企业版,包含实体Bean(Entity Beans),但编程模型较为复杂。 **1.3 JPA概述** JPA是JDO的替代品,简化了EJB 2.x的...
{8.3}创建线程的两种方法}{123}{section.8.3} {8.4}Runnable}{123}{section.8.4} {8.5}Sleep阻塞与打断唤醒}{124}{section.8.5} {8.5.1}sleep与wait的差异}{124}{subsection.8.5.1} {8.6}IO阻塞}{126}{section....