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

序列支持

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

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

从 Sequence 生成 ID 的实体
@Table
class MyEntity {

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

    // …
}

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

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

获取的标识符值包含在VALUES在插入过程中:spring-doc.cadn.net.cn

Insert 使用 Id 值扩充的语句Insert statement enriched with Id value
INSERT INTO "my_entity"("id", "name") VALUES(?, ?);
从序列中获取值和插入对象是两个独立的作。 我们强烈建议在周围的事务中运行这些作,以确保原子性。

支持的方言

以下方言支持 Sequences:spring-doc.cadn.net.cn

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