我们知道,一般的数据库中都有序列,可以使用它对主键进行自增长,hbm框架都是如此(比如,Hibernate)。那么,在不使用hbm框架的情况下,如何使主键进行自增长呢。其实,很简单,只需要在建表的时候给主键加一个默认值即可,下面以postgresql数据库为例,给出一个简单的说明(其他数据库的语法也许跟这个不一样):
id integer NOT NULL DEFAULT nextval('personid_seq'::regclass)
上面的"nextval('personid_seq'::regclass"部分就是关键,其中,personid_seq 就是一个序列,可以通过下面的语句进行声明:
CREATE SEQUENCE personid_seq
INCREMENT 1
MINVALUE 1
MAXVALUE 9223372036854775807
START 1
CACHE 5;
这样一来,在往数据库插入记录的时候,就不必给id字段进行手动赋值了。
PS:需要注意的事,你在insert into的时候,需要指明字段,不然会报错的。比如,test表中共有id与name两个字段,其中,id使用如上方式进行了自增长,那么你在插入记录的时候,需要像下面这么来写SQL语句:
insert into test(name) values('tiger');
而不能写成下面这种的:
insert into test values('tiger');
分享到:
相关推荐
主键通常是表中唯一标识记录的一列或一组列,用于确保数据的完整性和唯一性。本篇文章将深入探讨JPA的4种主键生成策略以及Hibernate的13种主键生成策略,并通过实例来帮助理解。 ### JPA主键生成策略 1. **`...
在Hibernate中,可以使用`<generator class="sequence">`来指定使用Sequence作为主键生成策略,并通过`<param name="sequence">SEQ_CHILD</param>`来指定具体的序列名称。这种方式适用于需要生成大量连续主键值的...
seqhilo策略类似于hilo,也是基于hi/lo算法,但它使用数据库序列而不是单独的表来获取高位值。这使得它更适合数据库支持序列的环境,如Oracle,但在跨数据库使用时可能需要额外的配置。 5. **identity**: ...
- **应用场景**:在支持 Sequence 的数据库环境中使用,如 Oracle 数据库,可以充分利用数据库本身的特性来提高主键生成的效率。 ##### 4. increment - **定义**:主键按数值顺序递增。实现机制为在当前应用实例中...
【hibernate主键生成策略】是Hibernate框架中用于生成持久化对象主键的重要机制,它决定了如何在数据库中创建唯一的标识符。在SSH(Spring、Struts、Hibernate)架构中,Hibernate作为持久层框架,主键生成策略的...
传统上,为了获取下一个自增长ID,开发人员可能会选择查询表中的最大ID值,然后在此基础上加1。例如: ```sql SELECT MAX(id) + 1 AS NextID FROM TableXXX; ``` 这种方法简单直观,但在多用户环境中容易出现问题...
2. **SEQUENCE**:使用数据库序列,适用于Oracle、PostgreSQL等支持序列的数据库。 3. **TABLE**:通过特定的表来生成主键,适用于不支持序列的数据库。 4. **AUTO**:由JPA供应商决定,通常是IDENTITY或SEQUENCE。 ...
5. **sequence**: 使用数据库的序列生成主键,适用于DB2、PostgreSQL、Oracle、SAP DB、McKoi和Interbase。 6. **hilo**: 使用Hi-Lo算法,需要一个数据库表来存储生成的主键。不适用于JTA环境或自定义数据库连接。 ...
如果数据库支持序列(如Oracle和PostgreSQL),可以使用`strategy=GenerationType.SEQUENCE`。这时,需要配合`@SequenceGenerator`注解来指定序列名称。`@SequenceGenerator`注解的属性包括: - `name`:必需的属性...
- 需要在映射文件中使用`<id name="id" column="ID" type="java.lang.Long" generator="increment"/>`标记。 - 仅适用于单个Hibernate实例或集群环境中所有节点共用一个Session Factory的场景。 - 不支持数据库的...
在数据库管理中,序列(Sequence)通常用于生成唯一的标识符,比如主键,尤其是在支持自动增长的数据库系统中。MySQL自身并不直接支持Sequence功能,但可以通过自定义的方式模拟这一功能。这里我们将详细介绍如何在...
在Hibernate框架中,对象与关系映射(ORM)是其核心功能之一,它能够将面向对象模型中的类与数据库表建立对应关系,从而实现对象和数据库之间的转换。而在持久化对象的过程中,为实体类中的主键自动生成唯一标识符是...
在支持序列的SQL方言(如Oracle、PostgreSQL或SQL Server 2012+)中,`CREATE SEQUENCE`用于创建自增序列,通常用作自动编号字段的来源。 7. **修改表结构**: - `ALTER TABLE`语句允许增加、删除或修改表的列。 ...
6. **discriminator-value**: 指定区分不同子类的值,在多态映射中使用。 7. **where**: 指定查询时的额外条件。 例如: ```xml <where>student_status = '0' ``` #### 三、id标签 `id` 标签用于定义 Java 类...
4. **主键策略**:MyBatis-Plus 支持多种主键生成策略,包括 Identity(自动增长)、Sequence(序列)、雪花算法等,可以根据不同的数据库类型选择合适的策略。 5. **批量操作**:支持批量插入、更新和删除,可以一...
- **sequence**:基于数据库序列生成主键,适用于支持序列的数据库如Oracle。 - **identity**:利用数据库的自动增长字段生成主键,适用于支持自动增长的数据库如MySQL。 - **uuid.hex**:生成128位的UUID,转换为16...
2. **Sequence**:使用数据库序列来生成 ID,适用于 Oracle 和 PostgreSQL。 3. **Table**:通过一个独立的表来生成 ID,适合所有数据库。 4. **HiLo**:高效 ID 生成器,适用于大型系统,避免过多的数据库交互。 5....