Se falamos apenas de persistência, Serializablenão é necessário. Mas é uma prática recomendada criar as entidades Serializable.
Se estamos expondo domain/ entitiesobjetos diretamente expostos à camada de apresentação, em vez de usar DTO, nesse caso, precisamos implementar Serializable. Esses objetos de domínio podem ser armazenados HTTPSessionpara fins de cache / otimização. Uma sessão http pode ser serializada ou agrupada. E também é necessário para transferir dados entre JVMinstâncias.
Quando usamos DTOpara dissociar a camada de persistência e a camada de serviço, marcar os objetos do domínio como Serializablecontraproducente e violar a "encapsulation ”. Então se torna um anti-padrão.
Identificadores compostos
A classe de chave primária deve ser serializável.
Modelos POJO
Se uma instância de entidade deve ser usada remotamente como um objeto desanexado, a classe de entidade deve implementar a Serializableinterface.
Cache
Além disso, se você estiver implementando um clusteredsegundo nível cache, suas entidades deverão estar serializable. O identificador deve ser Serializableporque esse é um requisito de JPA, pois identifierpode ser usado como a chave para uma entrada de cache de segundo nível.
E quando serializamos entidades, certifique-se de fornecer explícito serialVersionUIDo modificador de acesso privado. Porque se umserializable classe não declarar explicitamente a serialVersionUID, o tempo de execução da serialização calculará um serialVersionUIDvalor padrão para essa classe com base em vários aspectos da classe, conforme descrito em Java (TM) Object Serialization Specification. A serialVersionUIDcomputação padrão é altamente sensível aos detalhes da classe que podem variar dependendo das implementações do compilador e, portanto, podem resultar em inesperado InvalidClassExceptionsdurante a desserialização.