我有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 |
答案 0 :(得分:0)
如果您正在使用Oracle数据源,则可以在数据库中创建序列并指定使用它:
static mapping = {
id generator: 'sequence', params: [sequence: 'MY_SEQUENCE']
}
检查Grails documentation以获取有关生成器和/或链接到的Hibernate参考页面的更多信息。