此版本仍在开发中,尚未被视为稳定版本。如需使用最新的稳定版本,请使用 Spring Data Relational 4.0.4spring-doc.cadn.net.cn

序列支持

主键属性(使用 @Id 注解标注)也可以使用 @Sequence 注解进行标注。 @Sequence 注解的存在表明,该属性的初始值应在保存对象时从数据库序列中获取。 数据库生成序列的能力由所使用的数据库方言决定。 如果没有 @Sequence 注解,则假定对应列的值在插入行时由数据库自动生成。spring-doc.cadn.net.cn

考虑以下实体:spring-doc.cadn.net.cn

使用序列生成 ID 的实体
@Table
class MyEntity {

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

    // …
}

在持久化此实体时,Spring Data 会在执行 SQL INSERT 语句之前,先发出一个额外的 SELECT 语句,以从序列中获取下一个值。 例如,对于 PostgreSQL,Spring Data 发出的查询将如下所示:spring-doc.cadn.net.cn

在 PostgreSQL 中选择下一个序列值
SELECT nextval('public.my_seq');

在插入期间,获取到的标识符值包含在 VALUES 中:spring-doc.cadn.net.cn

插入语句中包含 Id 值
INSERT INTO "my_entity"("id", "name") VALUES(?, ?);
从序列中获取值和实际的插入语句是两个独立的操作。 我们强烈建议在事务环境中执行这些操作,以确保原子性。

支持的方言

以下方言支持序列(Sequences):spring-doc.cadn.net.cn

请注意,MySQL 不支持序列(sequences)。spring-doc.cadn.net.cn