Можно ли надежно сериализовать объекты hibernate jpa с использованием сериализации java по умолчанию?

Представьте, что у меня есть типичная схема СУБД с несколькими таблицами и сложная иерархия сущностей, использующая все (или многие) различные отношения Hibernate. Будут классы коллекций в виде некоторых полей (Наборы, Списки) для управления отношениями в Java и циклических ссылок. Может быть ленивая загрузка, поэтому за кадром будут прокси-классы.

Затем я решаю, что хочу сериализовать эту иерархию объектов, используя сериализацию Java по умолчанию, и, возможно, десериализовать ее позже обратно в память (предположим, обратно в ту же систему). Это просто, или есть подводные камни и обстоятельства, при которых это не сработает? Могут ли возникнуть проблемы, если, например, некоторые связанные объекты еще не загружены лениво?

Я бы не стал сериализовать объекты сущностей и не стал бы использовать сериализацию Java. Сериализация DTO с помощью более гибкого механизма сериализации дает вам гораздо больше контроля и намного меньше вопросов: «Что происходит?» моменты.

Kayaman 11.04.2018 12:03
0
1
76
1

Ответы 1

Мы создаем экземпляры объектов сущностей в ORM, чтобы соответствовать текущей информации в базе данных, и эти объекты, как правило, в значительной степени (как вы предлагаете) полагаются на живое (или восстанавливаемое: P) соединение с базой данных для восстановления ее информации, по одной штуке каждый раз.

Чтобы избежать этих проблем, я бы посоветовал вам быстро получить полную информацию о каждом объекте, прежде чем пытаться сериализовать информацию. Механизм сериализации зависит от вас, но вы должны учитывать множество вещей, пытаясь использовать собственный механизм Java (https://javajee.com/best-practices-for-serialization-in-java) вместо более легкого и более независимого от реализации.

В любом случае, и это просто личное мнение, я думаю, что вы не используете должным образом информацию, предоставленную ORM, предлагающую сериализовать объекты сущностей, поскольку он создает произвольный снимок состояния базы данных в произвольный момент, и это может быть полностью неточно в будущем, когда вы захотите восстановить эти объекты в памяти.

Другие вопросы по теме