序列支援
主鍵屬性(用 @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 INTO "my_entity"("id", "name") VALUES(?, ?);
| 從序列獲取值並插入物件是兩個獨立的操作。我們強烈建議在事務中執行這些操作以確保原子性。 |