實體狀態檢測策略

下表描述了 Spring Data 提供的用於檢測實體是否為新的策略

表 1. 在 Spring Data 中檢測實體是否為新的選項

@Id 屬性檢查 (預設)

預設情況下,Spring Data 檢查給定實體的識別符號屬性。如果識別符號屬性為 null 或對於原始型別為 0,則假定該實體是新的。否則,假定該實體不是新的。

@Version 屬性檢查

如果帶有 @Version 註解的屬性存在且為 null,或對於原始型別的版本屬性為 0,則實體被視為新的。如果版本屬性存在但具有不同的值,則實體被視為不是新的。如果不存在版本屬性,Spring Data 將回退到檢查識別符號屬性。

實現 Persistable

如果實體實現了 Persistable 介面,Spring Data 將新實體檢測委託給實體的 isNew(…) 方法。詳情請參閱 Javadoc

注意:如果使用 AccessType.PROPERTYPersistable 的屬性將被檢測到並持久化。為了避免這種情況,請使用 @Transient

提供自定義的 EntityInformation 實現

您可以透過建立模組特定倉庫工廠的子類並重寫 getEntityInformation(…) 方法,來定製倉庫基礎實現中使用的 EntityInformation 抽象。然後,您需要將模組特定倉庫工廠的自定義實現註冊為 Spring Bean。請注意,這通常很少有必要。