Если мы просто говорим о настойчивости, 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
последствиям при десериализации.