實體狀態檢測策略

下表描述了 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 實現

您可以透過建立模組特定儲存庫工廠的子類並覆蓋 getEntityInformation(…) 方法來自定義儲存庫基本實現中使用的 EntityInformation 抽象。 然後,您必須將模組特定儲存庫工廠的自定義實現註冊為 Spring bean。 請注意,這應該很少是必要的。