序列支援

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

支援的方言

以下方言支援序列

  • H2

  • HSQL

  • PostgreSQL

  • DB2

  • Oracle

  • Microsoft SQL Server

請注意,MySQL 不支援序列。

© . This site is unofficial and not affiliated with VMware.