如何使用GORM将固定长度的字符串映射到Postgresql?

时间:2014-06-01 20:37:00

标签: postgresql grails gorm liquibase hibernate-tools

我想在Postgresql(9.3)中存储一个9个字符的字符串作为字符(9)。同样重要的是,我希望它能正确验证数据库是否正确,这是不正确的。我正在使用数据库迁移插件生成模式,该插件使用Hibernate工具。这是我到目前为止所尝试的内容:

static mapping = {
    poleID column: "pole_id", sqlType: "character", length: 9
}

这正是它在DB中的创建方式,但是当我执行dbm-gorm-diff时,它会尝试修改列:

changeSet(author: "phil (generated)", id: "1401652394765-3") {
    modifyDataType(columnName: "pole_id", newDataType: "character", tableName: "unit")
}

您可以看到长度被忽略。我也尝试用:

指定它
static mapping = {
    poleID column: "pole_id", sqlType: "character(9)"
}

同样,它尝试将那个已经正确的列修改为character(9)。如何指定映射,以便它看到DB已经正确?

1 个答案:

答案 0 :(得分:2)

我刚刚遇到类似MySQL和grails 2.3.7的问题 - 我试图使用

sqltype: 'char', length: 128, 

但忽略了长度,schema-export显示为' char'。在MySQL中,char与varchar很重要,所以我通过指定

解决了这个问题
sqltype: 'char(128)'

我认为它只是Grails中的一个错误 - 除非明确表示有人希望这不会起作用(但是应该更好地记录)。