Я пытаюсь обновить код гибернации, который был написан кем-то другим в прошлом и сталкивается с проблемой десериализации. Как был написан оригинальный код, он не имел явно объявленного serialVersionUID и только что реализовал интерфейс Serializable -
public class SamplePOJO implements Serializable {
Теперь я пытаюсь добавить новый столбец в таблицу и сопоставить его с этим объектом. I:
- Изменена таблица для создания нового столбца
- Обновлен объект, чтобы включить новый объект String и метод получения / установки
за это и
- Обновлен файл .hbm для сопоставления столбца таблицы БД с объектом.
Однако, когда я запускаю его после компиляции, я получаю следующую ошибку -
"Error while deserializing from byte[]., caused by x.y.SamplePOJO; local class incompatible: stream classdesc serialVersionUID = 7997933458932550222, local class serialVersionUID = <other number internally auto generated as source didn't explicitly mention serialVersionUID>"
Если я обновлю код, включив в него serialVersionUID, совпадающий с кодом, указанным в приведенной выше ошибке, он будет выполнен без проблем.
Исходя из того, какую информацию я обнаружил, наиболее распространенной причиной, по-видимому, являются различные спящие банки в клиенте и сервере. Тем не менее, это не тот случай, когда он использует тот же банку гибернации. Может ли кто-нибудь помочь, если есть способ решить эту проблему, не упоминая отдельно serialVersionUID, который выдается во время исключения? Кроме того, если мне придется придерживаться этого подхода и если мой код переместится в другую среду (qa / prod), будет ли ожидаться другой serialVersionUID в зависимости от того, как он сериализуется в других средах?
Буду признателен за любую помощь!