Как в Grails получить значение дискриминатора?

У меня есть такой класс:

class Apple extends Fruit {
    static mapping = {
        discriminator "AppleType"
    }
}

Есть ли способ получить это значение дискриминатора в контроллере/представлении?


person Daniel T.    schedule 30.11.2012    source источник


Ответы (3)


Вы можете проверить сопоставление класса домена с помощью Mapping. Пример:

def mapping = GrailsDomainBinder.getMapping(Apple)
println mapping.discriminator
person Community    schedule 30.11.2012

В дополнение к ответу Серджио, GrailsDomainBinder, начиная с версии 2.3, больше не имеет статического метода getMapping(). Вместо этого вы должны создать экземпляр GrailsDomainBinder.

def mapping = new GrailsDomainBinder().getMapping(Apple)
println mapping.discriminator
person AndyN    schedule 25.08.2016

Я использовал этот хак в прошлом. Создайте производное свойство в базовом классе, которое запрашивает столбец дискриминатора.

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
person burns    schedule 10.10.2019