Якщо ми говоримо лише про наполегливість, 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під час десеріалізації.