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