Если мы просто говорим о настойчивости, Serializableэто не нужно, но лучше всего создавать сущности Serializable.
Если мы выставляем объекты domain/ entitiesобъекты, непосредственно представленные на уровне представления, вместо использования DTO, то в этом случае нам нужно реализовать Serializable. Эти доменные объекты могут храниться в HTTPSessionцелях кэширования / оптимизации. Http-сессия может быть сериализована или сгруппирована. И это также требуется для передачи данных между JVMэкземплярами.
Когда мы используем DTOдля разделения персистентного уровня и сервисного уровня, маркировка доменных объектов Serializableбудет непродуктивной и нарушит « encapsulation». Тогда это становится анти-паттерном.
Составные идентификаторы
Класс первичного ключа должен быть сериализуемым.
POJO Модели
Если экземпляр сущности должен использоваться удаленно как отдельный объект, класс сущности должен реализовывать Serializableинтерфейс.
Кэш
Кроме того, если вы реализуете clusteredвторой уровень, cacheто ваши сущности должны быть serializable. Идентификатор должен быть Serializableпотому, что это требование JPA, поскольку его identifierможно использовать в качестве ключа для записи в кэш второго уровня.
И когда мы сериализуем сущности, убедитесь, что предоставили явные serialVersionUID с модификатором частного доступа. Потому что, если serializableкласс явно не объявляет a serialVersionUID, тогда среда выполнения сериализации вычислит serialVersionUIDзначение по умолчанию для этого класса на основе различных аспектов класса, как описано в Спецификации сериализации объектов Java (TM). serialVersionUIDВычисления по умолчанию очень чувствительны к деталям класса, которые могут различаться в зависимости от реализаций компилятора, и, следовательно, могут привести к неожиданным InvalidClassExceptionsпоследствиям при десериализации.