2015-02-25 9 views
-2

Я могу сделать простое приложение grails в 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 } 
    } 
} 
} 

Я получаю сообщение об ошибке при liaisonInstance.save флеша: правда в Защиту сохранить(), но я не понимаю, почему. Если я посмотрю в своем журнале изменений, таблица выглядит нормально. Это какая-то скрытая карта хэша? Любая помощь будет большой.

ответ

1

Омг Я думаю, что понял. Я передумал. Статическое отображение должно быть

static mapping = { 
    id column: 'liaisonId' 
} 

вместо

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

Я думаю, что он должен делать с автогенерируемым первичным ключом является BigInt. Я думаю, что тип предназначен только для, если вы планируете использовать генератор id для первичного ключа.