Я создаю приложение Grails поверх устаревшей базы данных.
Есть таблица, из которой я хотел бы создать несколько разных доменных объектов (Type1, Type2 и Type3 в моем примере ниже).
Таблица выглядит так:
ID TYPE DESCRIPTION
1 type1 description of a type1 object
2 type1 description of another type1 object
3 type2 description of a type2 object
4 type3 description of a type3 object
...
Поэтому я хотел бы создать 3 разных класса домена, каждый из которых содержит поле с именем «description» и соответствует определенному «типу», поскольку строки представляют разные концепции.
Есть ли какое-либо ограничение, позволяющее фильтровать строки по типу?
Я имею в виду, могу ли я сделать что-то вроде:
class Type1 {
String type
String description
static mapping = {
table 'mytable'
}
static constraints = { type == 'type1' } // Is there anything like this ?
}
Тогда я ожидаю, что Type1.list () выдаст запрос, подобный:
SELECT type, description
FROM mytable
WHERE type = 'type1'
Обновление:
На самом деле документация говорит, что я могу использовать дискриминатор для достижения этой цели.
Однако я попытался установить свой класс следующим образом:
class Type1 extends BaseType {
static mapping = {
discriminator column:'type', value: 'type1'
}
}
Я активировал трассировку SQL в спящем режиме и вместо просмотра
SELECT ... FROM mytable WHERE type = 'type1'
Понятно
SELECT ... FROM mytable WHERE class = 'type1'
Кажется, дискриминатор полностью игнорирует имя моего пользовательского столбца :-(
Я использую Grails 1.2.1