【问题标题】:Grails Static Mapping argument type mismatch when saving保存时 Grails 静态映射参数类型不匹配
【发布时间】:2015-02-25 10:52:55
【问题描述】:

我可以在 2.4.4 中制作一个简单的 grails 应用程序,但是一旦我添加了更改主键名称的静态映射,它就拒绝保存。这是我使用的域类。

    class Liaison {
        String first;
        String last;
    static constraints = {}

    static mapping = {
       id column:'liaisonId', type: 'integer'
    }
    }

这是生成的控制器

  import static org.springframework.http.HttpStatus.*
  import grails.transaction.Transactional

  @Transactional(readOnly = true)
  class LiaisonController {

  static allowedMethods = [save: "POST", update: "PUT", delete: "DELETE"]

   def index(Integer max) {
     params.max = Math.min(max ?: 10, 100)
        respond Liaison.list(params), model:[liaisonInstanceCount: Liaison.count()]
}

def show(Liaison liaisonInstance) {
    respond liaisonInstance
}

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

@Transactional
def save(Liaison liaisonInstance) {
    if (liaisonInstance == null) {
        notFound()
        return
    }

    if (liaisonInstance.hasErrors()) {
        respond liaisonInstance.errors, view:'create'
        return
    }

    liaisonInstance.save flush:true

    request.withFormat {
        form multipartForm {
            flash.message = message(code: 'default.created.message', args: [message(code: 'liaison.label', default: 'Liaison'), liaisonInstance.id])
            redirect liaisonInstance
        }
        '*' { respond liaisonInstance, [status: CREATED] }
    }
}

def edit(Liaison liaisonInstance) {
    respond liaisonInstance
}

@Transactional
def update(Liaison liaisonInstance) {
    if (liaisonInstance == null) {
        notFound()
        return
    }

    if (liaisonInstance.hasErrors()) {
        respond liaisonInstance.errors, view:'edit'
        return
    }

    liaisonInstance.save flush:true

    request.withFormat {
        form multipartForm {
            flash.message = message(code: 'default.updated.message', args: [message(code: 'Liaison.label', default: 'Liaison'), liaisonInstance.id])
            redirect liaisonInstance
        }
        '*'{ respond liaisonInstance, [status: OK] }
    }
}

@Transactional
def delete(Liaison liaisonInstance) {

    if (liaisonInstance == null) {
        notFound()
        return
    }

    liaisonInstance.delete flush:true

    request.withFormat {
        form multipartForm {
            flash.message = message(code: 'default.deleted.message', args: [message(code: 'Liaison.label', default: 'Liaison'), liaisonInstance.id])
            redirect action:"index", method:"GET"
        }
        '*'{ render status: NO_CONTENT }
    }
}

protected void notFound() {
    request.withFormat {
        form multipartForm {
            flash.message = message(code: 'default.not.found.message', args: [message(code: 'liaison.label', default: 'Liaison'), params.id])
            redirect action: "index", method: "GET"
        }
        '*'{ render status: NOT_FOUND }
    }
}
}  

我在 def save() 中的 liaisonInstance.save flush:true 处收到错误,但我不明白为什么。如果我查看我的更改日志,该表看起来很好。它是某种隐藏的哈希图吗?任何帮助都会很棒。

【问题讨论】:

    标签: grails types save arguments mismatch


    【解决方案1】:

    天哪,我想我明白了。我想多了。静态映射应该是

    static mapping = {
        id column: 'liaisonId'
    }
    

    而不是

    static mapping = {
        id column: 'liaisonId', type: 'integer'
    }
    

    我认为这与自动生成的主键是 bigInt 有关。我认为 type 仅适用于您计划使用 id 生成器作为主键。

    【讨论】:

      猜你喜欢
      • 2021-12-24
      • 1970-01-01
      • 1970-01-01
      • 2021-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-04
      相关资源
      最近更新 更多