2012-02-07 8 views
17

Si ejecuta este código en la consola Grails:¿Por qué GORM no está guardando mi objeto?

def p = new Post(title: "T"); 
p.save(flush: true); // or p.save(); 

Post.count(); 

GORM no es tirar alguna excepción, pero los datos no se guarda en mi DB. ¿Qué estoy haciendo mal?

+0

En mi caso tuve otra parte del código que fue borrando mi fila , justo después de crear el nuevo ... :( – Topera

Respuesta

30

Es probable que tenga una violación de restricción. Agregue failOnError: true a sus parámetros de método guardar. Entonces obtendrás una excepción cuando tu guardado falle. (Alternativamente puede verificar el valor de retorno desde guardar, y si es falso imprimir p.errors.allErrors().)

La validación y el ahorro se realizan juntos. Si está validando datos enviados por el usuario que han sido vinculados a algún objeto de dominio, entonces para verificar el error de guardado debido a una entrada no válida, lo idiomático que debe hacer es verificar el valor de retorno de guardar; fallar debido a una entrada inválida no es un comportamiento excepcional. Si solo desea guardar el contenido del objeto y desea lanzar una excepción si hay un problema, use failOnError.

Para obtener más información sobre el motivo por el que diseñaron GORM, debe hacerlo see this article.

+1

+1 para el enlace –

+0

También puede usar 'validate()' en su objeto de dominio, y si devuelve falso NO lo llame método 'guardar()'. En su lugar, haga que el controlador devuelva un mensaje al usuario. –

+0

¿Qué pasa si establecer failOnError: true y no tengo excepciones, mientras que el objeto está marcado como "no guardado" por Grails? –

11

Probablemente se haya violado alguna restricción en Post y, por lo tanto, el objeto no se está guardando. Tenga en cuenta que el comportamiento predeterminado de GORM no es tirar en un guardado fallido. Usted necesitará o bien llamar así

p.save(flush: true, failOnError: true); 

o cambiar el comportamiento a nivel mundial mediante la adición de

grails.gorm.failOnError=true 

a su Config.groovy

Cuestiones relacionadas