Я создаю приложение Grails для устаревшей базы данных.
Есть таблица, из которой я хотел бы создать несколько различных объектов домена (тип 1, тип 2 и тип 3 в моем примере ниже).
Таблица выглядит примерно так. это :
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 разных класса предметной области, каждый из которых содержит поле с именем «описание» и соответствует определенному «типу», поскольку строки представляют разные концепции.
Есть ли какое-либо ограничение, которое позволяет мне фильтровать строки по типу?
Я имею в виду, могу ли я сделать что-то вроде:
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