Se parliamo solo di persistenza, Serializable
non è necessario, ma è buona prassi creare entità Serializable
.
Se stiamo esponendo domain
/ entities
oggetti direttamente esposti al livello di presentazione, anziché utilizzare DTO
, In tal caso dobbiamo implementare Serializable
. Questi oggetti di dominio possono essere archiviati HTTPSession
per scopi di memorizzazione nella cache / ottimizzazione. Una sessione http può essere serializzata o raggruppata. Ed è anche richiesto per il trasferimento di dati tra JVM
istanze.
Quando usiamo DTO
per disaccoppiare il livello di persistenza e il livello di servizio, contrassegnando gli oggetti del dominio come Serializable
controproducenti e violerebbero il " encapsulation
". Quindi diventa un anti-pattern.
Identificatori compositi
La classe di chiave primaria deve essere serializzabile.
Modelli POJO
Se un'istanza di entità deve essere utilizzata in remoto come oggetto separato, la classe di entità deve implementare l' Serializable
interfaccia.
Cache
Inoltre, se stai implementando un clustered
secondo livello, le cache
tue entità devono esserlo serializable
. L'identificatore deve essere Serializable
dovuto al fatto che si tratta di un requisito JPA poiché identifier
potrebbe essere utilizzato come chiave per una voce della cache di secondo livello.
E quando serializziamo le entità assicurati di fornire esplicitamente serialVersionUID
un modificatore di accesso privato. Perché se una serializable
classe non dichiara esplicitamente a serialVersionUID
, il runtime di serializzazione calcolerà un serialVersionUID
valore predefinito per quella classe in base a vari aspetti della classe, come descritto nelle Specifiche di serializzazione degli oggetti Java (TM). Il serialVersionUID
calcolo predefinito è altamente sensibile ai dettagli della classe che possono variare a seconda delle implementazioni del compilatore e può quindi comportare imprevisti InvalidClassExceptions
durante la deserializzazione.