此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Data Relational 3.4.5! |
序列支持
主键属性(用@Id
) 也可以用@Sequence
.
存在@Sequence
annotation 指示属性的初始值应在对象插入时从数据库序列中获取。
数据库生成序列的能力由使用的数据库方言决定。
在没有@Sequence
注释,则假定相应列的值由数据库在插入行时自动生成。
请考虑以下实体:
从 Sequence 生成 ID 的实体
@Table
class MyEntity {
@Id
@Sequence(
sequence = "my_seq",
schema = "public"
)
private Long id;
// …
}
在持久化此实体时,在 SQLINSERT
,Spring Data 将发出额外的SELECT
语句从序列中获取下一个值。
例如,对于 PostgreSQL,由 Spring Data 发出的查询将如下所示:
在 PostgreSQL 中选择下一个序列值
SELECT nextval('public.my_seq');
获取的标识符值包含在VALUES
在插入过程中:
Insert 使用 Id 值扩充的语句Insert statement enriched with Id value
INSERT INTO "my_entity"("id", "name") VALUES(?, ?);
从序列中获取值和插入对象是两个独立的作。 我们强烈建议在周围的事务中运行这些作,以确保原子性。 |