如何使枚举字段成为tinyint而不是varchar?

时间:2014-07-22 17:37:29

标签: grails groovy grails-2.0

我有一个定义为

的域类
class QuestionSurvey {

    String questionText
    QuestionTypeSurvey questionType

    static hasMany = [options: QuestionOptionSurvey]

    static constraints = {}
}

现在,在上面的域中,QuestionTypeSurvey是一个我在src / groovy中定义的枚举类,因为我不想为这个字段设置一个单独的表。 QuestionTypeSurvey定义如下:

enum QuestionTypeSurvey {

        TEXT_FIELD,
        TEXT_AREA,
        RADIO_BUTTON,
        DROPDOWN_BOX,
        CHECK_BOX
}

现在,当我运行应用程序并查看表结构时,我注意到QuestionSurvey表中的questionType字段不是我预期的一个小int,因为它指向枚举,但它是VARCHAR。我很困惑。反正有没有把类型变成tinyint而不是varchar,因为这是使用枚举而不是字符串的全部要点?谢谢你的帮助!

1 个答案:

答案 0 :(得分:2)

您可以在域类中添加映射配置,以便将枚举存储为int。我不知道如何强迫它成为一个tinyint,但至少它不是varchar。

static mapping = {
    questionType enumType: 'ordinal'
}

Grails doc: http://www.grails.org/doc/latest/ref/Database%20Mapping/column.html

您还可以向Enum类添加id字段,并根据需要定义存储的值。 http://blog.tamashumi.com/2013/06/grails-enum-custom-database-value.html