Поля JPA и базы данных Flex - PullRequest
2 голосов
/ 02 марта 2011

«Гибкие поля» - это термин для изменения таблицы на сайте клиента, чтобы добавить дополнительные столбцы в таблицу для хранения пользовательских фрагментов информации о сущности этой таблицы. Мне было интересно, кто-нибудь имел дело с поддержкой этого механизма с помощью jpa, в частности eclipselink.

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

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

Мне было интересно, делал ли кто-нибудь это, и есть ли какие-либо проблемы, которых я не вижу, или предложения о других подходах.

Ответы [ 2 ]

2 голосов
/ 02 марта 2011

Я начал создавать пример, который иллюстрирует, как EclipseLink может использоваться с расширяемыми моделями (таблица значений ключей или flex-столбцы).Эта работа еще не завершена, но я начал добавлять больше диаграмм и примеров кода на примерную вики-страницу:

http://wiki.eclipse.org/EclipseLink/Examples/JPA/Extensible

Это также включает использование динамической поддержки, упомянутой выше Джеймсом.

2 голосов
/ 02 марта 2011

Итак, если вы добавляете новые поля в вашу сущность, как бы вы использовали их в своем приложении? Вы также изменили бы свои приложения / код пользовательского интерфейса?

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

Если вы хотите изменить существующую таблицу, которая будет более сложной, вам также необходимо обновить сопоставления JPA, либо отредактировав orm.xml и повторно развернув приложение, либо добавив сопоставления в SessionCustomizer или DescriptorCustomizer. , EclipseLink также поддерживает VIRTUAL AccessMode, который позволяет сопоставлять столбец со свойством вместо поля или метода get / set.

Более грубый метод - обновить код объектной модели и код приложения, чтобы использовать новые данные.

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

См, http://wiki.eclipse.org/EclipseLink/Examples/JPA/Dynamic

...