【问题标题】:Gorm change primary key, not found with id nullGorm 更改主键,未找到 id 为 null
【发布时间】:2012-11-22 07:13:18
【问题描述】:

我已经阅读了大量关于此的问题,但似乎没有人让它发挥作用。

我正在使用 grails,并且我正在创建一个没有 id 作为主键的类。

我收到消息“未找到 id 为 null 的 usuario”。这是我的域类的代码:

    class Usuario implements Serializable{ 

     String nombre 
     String celular 
     String telefono 
     String apellido 
     String password 
     String nick 

     static mapping = { 
      table 'Usuarios' 
      version false 
      id composite: ['nick'] 
} 
} 

我也尝试了正常的方式:

    static mapping = { 
    table 'Usuarios' 
    version false 
     id name: 'nick' 
} 

它实际上使用自然键和所有内容以我想要的方式映射表,它插入新的 usuarios,但是 gui 无法检索任何对象并显示错误:“usuario not found with id null”

我尝试修改 show(Long id) 方法,但也无济于事,这是我的控制器显示方法:

    def show(String nick) {
    def usuarioInstance = Usuario.get(nick)
    if (!usuarioInstance) {
        flash.message = message(code: 'default.not.found.message', args: [message(code: 'usuario.label', default: 'Usuario'), nick])
        redirect(action: "list")
        return
    }

    [usuarioInstance: usuarioInstance]
}

【问题讨论】:

    标签: grails grails-orm scaffolding natural-key


    【解决方案1】:

    您需要指定分配的生成器:

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

    另外,添加以下约束可能是明智之举:

    static constraints = {
        nick blank:false, nullable:false, unique: true
    }
    

    【讨论】:

    • 我也分配了生成器,它仍然给我同样的错误。我的意思是,它插入了新的“usuario”,但它不会检索它。即使表 usuario 没有任何 id 属性,它仍然给出相同的“usuario not found with id null”
    • 您可能必须将您的 nick-属性重命名为 id 并且:1) 适当地重命名映射和约束,2) 创建一个nick 的 getter 和 setter(操作 id 字段),3)添加 static transients = ['nick'](解决有 setter&getter 但没有字段的问题)
    • 好吧,我终于让它工作了,问题确实是控制器和视图使用 usuarioInstance.username 不断重定向和调用方法:我的映射是静态映射 = { table 'Usuario' version false id名称:“用户名”,生成器:“已分配”}
    • 我更改了控制器上的“show”方法,参见下面的代码: def show(String id) { def usuarioInstance=Usuario.findByUsername(id) if (!usuarioInstance) { flash.message = message (code: 'default.not.found.message', args: [message(code: 'usuario.label', default: 'Usuario'), id]) redirect(action: "list") return } [usuarioInstance: usuarioInstance ] }
    • 如果有人想了解更多关于如何让它工作的信息可以pm我,我会帮助任何人
    猜你喜欢
    • 2015-01-26
    • 2015-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-08
    • 1970-01-01
    • 1970-01-01
    • 2017-05-26
    相关资源
    最近更新 更多