我有一个定义为
的域类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,因为这是使用枚举而不是字符串的全部要点?谢谢你的帮助!
答案 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