Вот что я хотел бы сделать:Как добавить ограничения на наследуемых свойств в области Grails подклассу
class A {
String string
static constraints = {
string(maxSize:100)
}
}
class B extends A {
static constraints = {
string(url:true)
}
}
Так класс А должен иметь некоторые ограничения и B должны иметь то же самое плюс дополнительные ограничений на одно и то же свойство.
Я не мог заставить это работать, хотя и могу представить, что он столкнулся с концепцией «Таблица за иерархию».
Итак, я попытался обойти эту проблему, представив объект Command с ограничениями класса B, которые могут быть проверены в конструкторе класса B. Однако кажется, что объекты Command могут использоваться только в контроллерах (граф говорит, что там для него нет метода .validate().
Так что мой вопрос: что является самым элегантным способом решения этой проблемы с использованием ограничений Grails (не повторное выполнение проверки вручную)? Может быть ...
- Переключившись на концепцию Table-per-Sub-Class?
- Создание объекта Command в классе Domain каким-то образом?
- Любой другой способ?
Edit: Было бы хорошо для меня, чтобы определить все ограничения в дочерних классах, повторяя ограничения родительского класса или даже не имеющие ограничения в родительском классе вообще. Но решение должно работать для нескольких дочерних классов (с разными ограничениями) одного и того же родительского класса.
Я не уверен, что каждое ограничение будет работать таким образом, так как по умолчанию наследуются классы отображаются в одной таблице БД. Итак, если у вас есть класс C с ненулевыми, уникальными ограничениями на C.c, он наложит ограничение таблицы DB на всю таблицу A - и поле c будет там для всех классов и будет null для чего-либо, кроме экземпляров C. –
Да, именно поэтому я привнес в игру Table-per-Sub-Class. –