Как использовать JPA, чтобы сделать базу данных объектов библиотеки постоянной? - PullRequest
2 голосов
/ 30 января 2010

Я использую JPA в небольшом приложении, над которым я работаю. Теперь мне необходимо создать структуру данных, которая в основном расширяет или инкапсулирует объект структуры данных графа. График необходимо сохранить в базе данных.

Для персистентных объектов, которые я пишу сам, их очень легко расширять, а расширяющие классы также легко сохраняются. Однако теперь я хочу использовать библиотеку объектов, связанных с графами (узлы, ребра, простые графы, ориентированные графы и т. Д.), В библиотеке JGrahpT. Однако базовые классы не определены как постоянные объекты JPA, поэтому я не уверен, как получить эти классы для сохранения в базе данных.

У меня есть пара идей, и я хотел бы получить отзыв.

Вариант 1)

Используйте шаблон дизайна декоратора, чтобы добавить постоянство в расширенную версию базового класса.

Проблемы:

- Как мне сохранить частные поля класса, которые необходимы для его правильного состояния? Должен ли я просто расширить класс, добавить поле идентификатора и пометить его как постоянный? Как JPA получит необходимые поля из родительского класса? (Что-то вроде модификации класса среды исполнения ruby ​​было бы здесь здорово)

- Существует иерархия классов (абстрактный граф, ориентированный граф, ориентированный взвешенный граф и т. Д.). Если я продолжу, чтобы получить постоянство, расширение классов все равно не будет иметь общий родительский класс. Как мне решить это? (Опять же, что-то вроде модификации класса среды исполнения ruby ​​было бы здесь здорово)

Вариант 2) Скопируйте и вставьте всю базу кода. Измените исходный код каждого файла, чтобы сделать его совместимым с JPA.

- очевидно, это много работы

Я уверен, что есть другие варианты .. Что у тебя есть для меня ТАК ???

Ответы [ 2 ]

3 голосов
/ 01 февраля 2010

Соответствуют ли базовые классы соглашениям об именах JavaBeans? Если это так, вы сможете отобразить их, используя синтаксис XML JPA.

Это задокументировано в главе 10 спецификации:

XML-дескриптор предназначен для служить в качестве альтернативы и Механизм переопределения для языка Java аннотации метаданных.

Этот XML-файл обычно называется orm.xml. Схема доступна онлайн

0 голосов
/ 30 января 2010

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

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

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