Se parliamo solo di persistenza, Serializablenon è necessario, ma è buona prassi creare entità Serializable.
Se stiamo esponendo domain/ entitiesoggetti direttamente esposti al livello di presentazione, anziché utilizzare DTO, In tal caso dobbiamo implementare Serializable. Questi oggetti di dominio possono essere archiviati HTTPSessionper scopi di memorizzazione nella cache / ottimizzazione. Una sessione http può essere serializzata o raggruppata. Ed è anche richiesto per il trasferimento di dati tra JVMistanze.
Quando usiamo DTOper disaccoppiare il livello di persistenza e il livello di servizio, contrassegnando gli oggetti del dominio come Serializablecontroproducenti 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' Serializableinterfaccia.
Cache
Inoltre, se stai implementando un clusteredsecondo livello, le cachetue entità devono esserlo serializable. L'identificatore deve essere Serializabledovuto al fatto che si tratta di un requisito JPA poiché identifierpotrebbe essere utilizzato come chiave per una voce della cache di secondo livello.
E quando serializziamo le entità assicurati di fornire esplicitamente serialVersionUIDun modificatore di accesso privato. Perché se una serializableclasse non dichiara esplicitamente a serialVersionUID, il runtime di serializzazione calcolerà un serialVersionUIDvalore predefinito per quella classe in base a vari aspetti della classe, come descritto nelle Specifiche di serializzazione degli oggetti Java (TM). Il serialVersionUIDcalcolo predefinito è altamente sensibile ai dettagli della classe che possono variare a seconda delle implementazioni del compilatore e può quindi comportare imprevisti InvalidClassExceptionsdurante la deserializzazione.