實體狀態偵測策略

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

您可以透過建立模組特定 repository 工廠的子類別並覆寫 getEntityInformation(…) 方法,來自訂在 repository 基礎實作中使用的 EntityInformation 抽象化。然後您必須將模組特定 repository 工廠的自訂實作註冊為 Spring bean。請注意,這應該很少有必要。