У меня есть такой класс:
class Apple extends Fruit {
static mapping = {
discriminator "AppleType"
}
}
Есть ли способ получить это значение дискриминатора в контроллере/представлении?
У меня есть такой класс:
class Apple extends Fruit {
static mapping = {
discriminator "AppleType"
}
}
Есть ли способ получить это значение дискриминатора в контроллере/представлении?
Вы можете проверить сопоставление класса домена с помощью Mapping. Пример:
def mapping = GrailsDomainBinder.getMapping(Apple)
println mapping.discriminator
В дополнение к ответу Серджио, GrailsDomainBinder
, начиная с версии 2.3, больше не имеет статического метода getMapping()
. Вместо этого вы должны создать экземпляр GrailsDomainBinder
.
def mapping = new GrailsDomainBinder().getMapping(Apple)
println mapping.discriminator
Я использовал этот хак в прошлом. Создайте производное свойство в базовом классе, которое запрашивает столбец дискриминатора.
static mapping = {
fruitType formula: "class" // discriminator column defaults to 'class'
}
String fruitType
Это добавляет свойство fruitType, которое устанавливается каждый раз, когда класс извлекается из базы данных.
Свойство будет пустым, пока оно не будет получено из базы данных.
Если вы измените столбец дискриминатора, просто измените формулу соответствующим образом.
static mapping = {
discriminator column: "custom_column_name"
fruitType formula: "custom_column_name"
}
String fruitType