Grails数据获胜';如果id列被重命名,则不能绑定

Grails数据获胜';如果id列被重命名,则不能绑定,grails,Grails,Grails将自动从域类创建id和版本列。我想使用我自己的列作为主键。因此,我按照文档更改映射 class book { String isbn static mapping = { id generator: 'assigned', name: 'isbn' } } 到目前为止还不错。isbn列现在是主键。 我使用generate all创建视图和控制器。但是,数据绑定将不再工作 创建和保存工作没有问题。它把一本书绑在视图上。我可以向数据库中添加一本新

Grails将自动从域类创建id和版本列。我想使用我自己的列作为主键。因此,我按照文档更改映射

class book {
    String isbn
    static mapping = {
        id generator: 'assigned', name: 'isbn'
    }
}
到目前为止还不错。isbn列现在是主键。 我使用generate all创建视图和控制器。但是,数据绑定将不再工作

创建和保存工作没有问题。它把一本书绑在视图上。我可以向数据库中添加一本新书,没问题

def create() {
   respond new Book(params)
}

def save(Book book) {
   if (book == null) {
      notFound()
      return
   }
   ...
}
但是更新操作不绑定。在“编辑”视图中单击“更新”按钮后,书本为空

def update(Book book) {
   if (book == null) {
      notFound()
      return
   }
   ...
}
“保存”和“更新”操作中“生成全部”生成的代码相同。我不明白为什么它会将书本绑定到保存操作而不是更新操作

请你给我看看这个问题好吗


非常感谢

我想我明白了。当我将一个对象绑定到一个视图时,Grails被硬编码以查找id属性。它必须拼写为“id”。如果域类中没有“id”属性,Grails将不会绑定

我解决这个问题的方法是查看服务器生成的实际HTML

如果有一个id属性绑定到视图,我看到HTML有。/controller/action/id链接

如果缺少id属性,则HTML链接仅为。/controller/index

我不熟悉Grails。因此,我想为了使绑定能够工作,我需要为Grails提供一个id属性,以便将其放入链接中

我想这是一个休息电话。我不知道剩下的是什么

因此,我将尝试向我的Book domain类添加一个虚拟id属性,看看Grails是否会上钩。我将设置域,以便Grails不会在数据库表中生成id列。id属性仅在本地使用。无需将其保存到数据库中

class book {
    String isbn
    String id
    static mapping = {
        id generator: 'assigned', name: 'isbn'
    }
}
我将isbn值复制到id属性。我不确定这是否有效。我希望Grails将在视图中使用id属性中的isbn字符串而不是默认的整数id值生成链接。
。/controller/action/978-3-16-148410-0

参数
是否包含
参数id
参数isbn
的值,两者都包括,还是两者都不包括?如果这是POST/PUT请求,则表单字段的问题相同。是,
params
由视图填写<代码>参数id
为空<代码>参数。isbn已填写。My book域没有
id
字段。我将
id
字段替换为
isbn
字符串字段。