Я пытаюсь найти способ добавления динамических полей в класс домена grails. Я нашел динамический класс домена, основанный на статье Берт, но это слишком много для наших нужд.Добавление динамических полей в объект домена в Grails
Предположил есть класс домена человека:
class Person extends DynamicExtendableDomainObject {
String firstName
String lastName
static constraints = {
firstName(nullable: false, blank: false, maxSize: 50)
lastName(nullable: false, blank: false)
}
}
Теперь клиент хочет также иметь поле BirthDate в этом. Используя какой-то инструмент управления, он добавляет это дополнительное поле в базу данных.
Клиент b хочет также иметь поле среднего имени, поэтому он добавляет к нему лицо среднего имени.
Теперь мы реализовали класс DynamicExtendableDomainObject
, наследуемый классом Person. Это добавляет настраиваемое поле для каждого класса Domain, наследующего от него, для хранения динамических свойств в нем JSON
(вроде KiokuDB в Perl хранит их).
Теперь, когда Person создается, мы хотели бы добавить эти динамические свойства к классу Person, чтобы иметь возможность использовать стандартный грейтер и сеттер Grails, а также функции Templating для них.
Так что на клиенте мы могли бы использовать строительный лес и человек будет выводить ПгвЬЫате, LastName, BirthDate на клиенте б подмостей будет выводить ПгвЬЫате, ФАМИЛИЯ, ОТЧЕСТВО.
Сохранение свойств будет осуществляться с использованием saveinterceptor
, чтобы сериализовать эти свойства в JSON и сохранить их в специальном поле.
Но мы еще не нашли способ динамически добавлять эти свойства JSON в класс домена во время выполнения. Есть ли хороший способ справиться с этим? И если да, то как это лучше всего реализовать?
Я не уверен, если я понял вашу проблему, но не может вы просто использовали карту с дополнительным значений на каждую запись Person, вместо того, чтобы возиться с классом домена? – elias
У вас есть пример где-нибудь, используя решение карты (или плагин, который использует этот метод, чтобы я мог взглянуть на него)? Как работает решение карты с проверкой? Как хранит карты gorm/hibernate? – PWFraley
См. Http://grails.org/doc/latest/guide/GORM.html#sets,ListsAndMaps Hibernate создаст другую таблицу для хранения значений карты, что-то вроде 'person_MapName'. Я не уверен, как пройти проверку, однако вам придется реализовать пользовательский валидатор. – elias