Se falamos apenas de persistência, Serializable
não é necessário. Mas é uma prática recomendada criar as entidades Serializable
.
Se estamos expondo domain
/ entities
objetos diretamente expostos à camada de apresentação, em vez de usar DTO
, nesse caso, precisamos implementar Serializable
. Esses objetos de domínio podem ser armazenados HTTPSession
para fins de cache / otimização. Uma sessão http pode ser serializada ou agrupada. E também é necessário para transferir dados entre JVM
instâncias.
Quando usamos DTO
para dissociar a camada de persistência e a camada de serviço, marcar os objetos do domínio como Serializable
contraproducente 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 Serializable
interface.
Cache
Além disso, se você estiver implementando um clustered
segundo nível cache
, suas entidades deverão estar serializable
. O identificador deve ser Serializable
porque esse é um requisito de JPA, pois identifier
pode ser usado como a chave para uma entrada de cache de segundo nível.
E quando serializamos entidades, certifique-se de fornecer explícito serialVersionUID
o modificador de acesso privado. Porque se umserializable
classe não declarar explicitamente a serialVersionUID
, o tempo de execução da serialização calculará um serialVersionUID
valor padrão para essa classe com base em vários aspectos da classe, conforme descrito em Java (TM) Object Serialization Specification. A serialVersionUID
computaçã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 InvalidClassExceptions
durante a desserialização.