У меня проблема с пользовательской сериализацией Java. У меня есть график объектов и вы хотите настроить, где остановиться, когда я сериализую корневой объект от клиента к серверу.Сериализация части объекта графа
Давайте сделаем это немного конкретным, понятным, предоставив образец сценария. У меня есть классы типа
Компания
Сотрудника (аннотация)
Менеджер расширяет сотрудники
секретаря расширяет Сотрудник
Аналитик расширяет Сотрудник
Проект
Вот отношения:
компании (1) - - (n) Сотрудник
Менеджер (1) --- (n) Проект
Аналитик (1) --- (n) Проект
Представьте, я нахожусь на стороне клиента, и я хочу создать новую компанию, назначить ее 10 сотрудникам (новым или некоторым существующим) и отправить эту новую компанию на сервер. То, что я ожидаю в этом сценарии, - это сериализовать компанию и всех ограничивающих сотрудников на стороне сервера, потому что я сохраню отношения в базе данных. До сих пор не проблема, поскольку механизм сериализации Java по умолчанию сериализует весь граф объектов, исключая поле, которое является статическим или временным.
Моя цель - о следующем сценарии. Представьте, я загрузил компанию и ее 1000 сотрудников с сервера на клиентскую сторону. Теперь я хочу только переименовать название компании (или другое поле, прямо принадлежащее компании) и обновить эту запись. На этот раз я хочу отправить только объект компании на серверную сторону, а не весь список сотрудников (я просто обновляю имя, сотрудники в этом случае неактуальны). Моя цель также включает в себя конфигурацию высказывания, передачу компании И сотрудникам, а не Project-Relations, вы должны остановиться там.
Знаете ли вы какую-либо возможность достижения этого в общем виде без реализации writeObject, readObject для каждого объекта Entity-Object? Какие будут ваши предложения?
Я был бы очень признателен за ваши ответы. Я открыт для любых идей и готов ответить на ваши вопросы, если что-то неясно.
Привет Bozho, спасибо за быстрый ответ. Я также думаю, что решение DTO является хорошим. Это было сконструировано таким образом, чтобы сэкономить время на поддержание кода, дублирование для DTO и DO отдельно. Сейчас мы находимся в таком фазе, где проблема должна решаться без интеграции DTO. В противном случае потребуется много времени, так как у нас есть кеш на клиенте, который должен быть обновлен в соответствии с DTO на этот раз и т. Д. – Max