此版本仍在开发中,尚不被认为是稳定的。对于最新的稳定版本,请使用 Spring Data Relational 3.5.2spring-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;

    // …
}

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

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

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

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

支持的方言

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

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