как динамически добавлять поля при использовании Hibernate - PullRequest
1 голос
/ 27 января 2009

Проблема

Динамически добавляйте и удаляйте поля для объектов на лету, используя Hibernate.

Я уверен, что это распространенный сценарий, большинство корпоративных приложений требуют определенного уровня настройки. так что это лучший способ сделать это? также в идеале это не должно требовать перекомпиляции и плавного создания / удаления поля в схеме и обеспечения возможности продолжения работы приложения.

Если вопрос заключается только в обновлении xml (я уверен, что прокси-классы требуются), то как схема загружается заново?

Спасибо миллион за ввод

Примечание: если вы думаете, что есть лучшее решение, я тоже всем благодарю

Ответы [ 2 ]

1 голос
/ 27 января 2009

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

Обновление схемы также не будет простым. Даже несмотря на то, что Hibernate предлагает программные изменения схемы, он ограничен простыми вещами, такими как добавление / удаление полей. Это может сработать для вас, но если тип данных или обнуляемость столбца изменятся, Hibernate не обновит его для вас.

Возможно, вы захотите рассмотреть отношение OneToMany и сохранить данные в виде строки в отдельной таблице, предполагая, что вы можете принять накладные расходы другого соединения.

0 голосов
/ 27 января 2009

Я сделал это один раз (копаясь в моей памяти). Хорошо. Сделайте это:

  • Скачать исходный код Hibernate
  • найдите класс, который загружает конфигурацию XML

Вы увидите, что он создает класс, который содержит определения таблиц. Обратите внимание на имена и типы полей. Если поле закрытое, то Field.setAccessible(true) ваш друг.

Что вам нужно сделать, это запросить в глобальном классе конфигурации список таблиц, найти вашу таблицу и затем изменить список полей. Проблема начинается с отображения этих полей в некоторый класс, потому что вы не можете изменить класс Java во время выполнения).

Поскольку это довольно сложно, вот более простой способ: создать отображение Hibernate со всеми полями, а затем использовать пользовательский запрос для загрузки только подмножества. Вы можете легко создать такой запрос во время выполнения, используя HQL. Укажите только нужные вам столбцы, а Hibernate не будет пытаться загрузить остальные.

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