Создание объектов JDO из существующей базы данных

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


person Roel Veldhuizen    schedule 01.09.2011    source источник


Ответы (1)


Объекты JDO не являются простыми оболочками для строк базы данных (хотя вы можете реализовать свои объекты JDO как простые оболочки для строк базы данных, если хотите). Таким образом, большинство автоматизированных инструментов не будут знать, как должен быть представлен объект, только просматривая базу данных.

Например, такой объект, как:

public class Person {

   private List<PhoneNumber> phoneNumbers;

   ...

   public List<PhoneNumber> getPhoneNumbers() {
     ...
   }

}

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

Другие реализации могут выглядеть так

public class PhoneNumber {

   public Person getPerson() {
     ...
   }
}

И заставить пользователя извлекать телефонные номера человека в отдельном запросе к базе данных. Для инструмента общего назначения просто невозможно предсказать, какой способ вы хотите использовать. С двумя вариантами (представленными здесь) довольно легко сказать: «Сделайте это настраиваемым!» Однако после того, как вы добавите восемь или более независимых вариантов в комбинации, неясно, будет ли проще настроить генерацию класса (в отличие от написания класса напрямую).

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

person Edwin Buck    schedule 12.09.2011
comment
Когда таблица Person имеет связь N с PhoneNumber, инструмент должен заметить это правильно? - person Roel Veldhuizen; 15.09.2011
comment
@Roel Veldhuizen, да, теоретический инструмент сможет заметить отношение 1..N в базе данных; однако он не сможет правильно угадать, как программа будет лучше всего обращаться к записям. Например, историю вызовов по контактному номеру может быть лучше включить при извлечении номера контакта, или может быть лучше, чтобы она загружалась независимо от номера контакта, или может быть лучше извлекать историю лениво, когда исследуется история. Зная, как программа нуждается в информации, невозможно сделать вывод только из таблиц SQL. - person Edwin Buck; 15.09.2011