Persist Object из фреймворка с использованием Hibernate - PullRequest
0 голосов
/ 16 декабря 2010

Я рассматриваю возможность сохранения определенного объекта из библиотеки / инструментария, который я использую.Существуют следующие проблемы:

У объекта есть поле id, которое является строкой.Как сохранить в нем сгенерированное числовое значение?

Иерархия объектов библиотеки довольно сложна, и соответствующий объект находится внизу.Также он содержит массивы, которые должны отображаться как OneToMany.

Как создать файл сопоставления для этого объекта?Пройдите все родительские классы, чтобы определить обязательные поля?(исходный код доступен).Или есть возможность сохранить их все?

1 Ответ

0 голосов
/ 16 декабря 2010

Я бы сказал, прежде всего, потратить немного времени на анализ вашей доменной модели.

Вам нужно выполнить запросы к этим объектам, которые вы хотите сохранить (помимо чтения и сохранения)? Будут ли эти запросы зависеть от зависимостей этих объектов? Вы действительно хотите сохранить весь граф объектов, с которым связан ваш объект?

Мое первое впечатление - решение сохранить один объект из сторонней библиотеки / фреймворка не очень хорошая идея, потому что:

  • у вас нет контроля над зависимостями / отношениями объекта и жизненным циклом объекта. Он создан этой третьей стороной, верно?
  • вы должны подчиняться этой конкретной структуре, которая, скорее всего, не оптимизирована / не предназначена для персистентных целей. Создание отображений Hibernate для не поддерживаемой вами структуры утомительно.
  • в конечном итоге вы получите больше информации, чем вам нужно
  • Если вы когда-либо обновите версию используемой вами сторонней библиотеки, ваши отображения в Hibernate могут больше не совпадать.
  • Есть ряд принципов проектирования, которые будут

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

Надеюсь, это имеет смысл. Если вы уже рассмотрели все это и все еще хотите сохранить эту структуру, дайте мне знать! :)

UPDATE Я не имею в виду создание структуры, которая реализует те же интерфейсы, что и сторонний объект, я имел в виду создание полностью переработанной структуры, приспособленной для персистентности в реляционной базе данных. Затем адаптер создаст стороннюю структуру на основе ваших объектов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...