跳到主要内容

序列支持

Doubao 中英对照 Sequence Support

主键属性(标注了 @Id)也可以标注 @Sequence。@Sequence 注解的存在表示,该属性的初始值应在对象保存时从数据库序列中获取。数据库生成序列的能力取决于所使用的数据库方言。在没有 @Sequence 注解时,假定相应列的值在插入行时由数据库自动生成。

请看以下实体:

@Table
class MyEntity {

@Id
@Sequence(
sequence = "my_seq",
schema = "public"
)
private Long id;

// …
}
java

在持久化此实体时,在 SQL INSERT 之前,Spring Data 会额外发出一条 SELECT 语句,以从序列中取下一个值。例如,对于 PostgreSQL,Spring Data 发出的查询将如下所示:

SELECT nextval('public.my_seq');
sql

取到的标识值会在插入时包含在 VALUES 中:

INSERT INTO "my_entity"("id", "name") VALUES(?, ?);
sql
备注

从序列中获取值与实际的 insert 语句是两个独立的操作。我们强烈建议将这些操作放在一个外围事务中运行,以确保原子性。

支持的方言​

以下方言支持序列:

  • H2

  • HSQL

  • PostgreSQL

  • DB2

  • Oracle

  • Microsoft SQL Server

请注意,MySQL 不支持序列。