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