GORM:从复合键更改为自动递增主键

时间:2015-06-17 23:51:42

标签: grails gorm

我有GORM域类,它具有在静态映射中定义的复合键,如下所示:

static mapping = {
    table 'myTable'
    id composite: ['Y', 'Z']
    X column: 'xColName'
    Y column: 'yColName'
}

我需要更改此类以删除复合主键,并将主键设置为具有自动递增值的通用id字段。但是,表'myTable'中当前存在行,当我从映射中删除“复合”行时,Grails会添加默认的'id',但每行的'id'的默认值为'0'。 / p>

| X     | Y     | id     |
==========================
| a     | d     | 0      |
| b     | e     | 0      |
| c     | f     | 0      |

我尝试了许多不同的“生成器”和以下所有类型的id列组合:

static mapping = {
   id column: 'id', generator: 'increment'
   ...
}

我还运行了dbm-gorm-diff,它生成了这个:

changeSet(author: " (generated)", id: "1434577127626-10") {
    dropPrimaryKey(tableName: "myTable")
    addPrimaryKey(columnNames: "id", constraintName: "classNamePK", tableName: "myTable")
}

但是,当更改日志运行时,GORM已将我的域对象加载到内存中,并在id字段中添加了值为“0”的值。有没有办法让myTable将id列设置为生成序列号的主键?或者我需要通过自己添加这些,然后更改changelog.groovy中的主键来跳过一些环节

| X     | Y     | id     |
==========================
| a     | d     | 1      |
| b     | e     | 2      |
| c     | f     | 3      |

1 个答案:

答案 0 :(得分:0)

如果您正在使用Oracle数据源,则可以在数据库中创建序列并指定使用它:

static mapping = {
    id generator: 'sequence', params: [sequence: 'MY_SEQUENCE']
}

检查Grails documentation以获取有关生成器和/或链接到的Hibernate参考页面的更多信息。