實體狀態檢測策略

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

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

@Id 屬性檢查(預設)

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

@Version 屬性檢查

如果存在用 @Version 註解的屬性且其值為 null,或者對於基本型別的版本屬性值為 0,則認為該實體是新實體。如果版本屬性存在但具有不同的值,則認為該實體不是新實體。如果沒有版本屬性,Spring Data 會回退到檢查識別符號屬性。

實現 Persistable

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

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

提供自定義 EntityInformation 實現

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