3

我有这样的课:

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

有没有办法在控制器/视图中获得这个鉴别器值?

4

3 回答 3

4

您可以使用Mapping类检查域类的映射。例子:

def mapping = GrailsDomainBinder.getMapping(Apple)
println mapping.discriminator
于 2012-11-30T11:13:43.827 回答
2

作为 Sergio 回答的补充,GrailsDomainBinder从 2.3 开始,该方法不再具有getMapping()静态方法。您必须改为实例化一个GrailsDomainBinder.

def mapping = new GrailsDomainBinder().getMapping(Apple)
println mapping.discriminator
于 2016-08-25T16:21:45.470 回答
1

我过去使用过这个hack。在查询鉴别器列的基类上创建派生属性。

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
于 2019-10-10T05:03:45.667 回答