Eu acho que essa do Serializable não é realmente necessário. Pode depender bastante do seu contexto.
Dá uma olhada neste link.
O equals e o hashCode (resumidamente) testam a igualdade entre dois objetos. Se você quer comparar 2 valores do tipo inteiro (int), você usa o “==”. Por outro lado, se você quiser comparar dois objetos do tipo Integer, você teria de usar equals (if um.equals(dois) … ). Um exemplo do hashCode bem básico é o seguinte: imagine que você tem arquivos XML e quer comprar um arquivo a com um b. Você poderia usar o equals ou o hashCode. Se você usar o hashCode, o valor do hashCode do a vai ser idêntico ou valor do hashCode de b se eles forem ‘o mesmo arquivo com um nome diferente’ ou coisa do tipo.
G
garcia-jj
Conforme o André disse uma entidade não precisa ser Serializable. Porém toda PK precisa ser Serializable.
Além disso, quando você utiliza uma aplicação distribuída você precisa serializar os DTOs.