2009-09-25 8 views
1

J'ai un système groovy configuré en utilisant tomcat et Oracle 10g. J'ai une classe groovy qui définit une suit: (version réduite)Problème de validation Groovy

class ChangeTicket { 

static constraints = { 
    chngNr(nullable:false) 
} 

String chngNr 
} 

Mon contrôleur a défini une méthode de sauvegarde:

if (changeTicketInstance.validate() && !changeTicketInstance.hasErrors() && changeTicketInstance.save()) {   
     flash.message = "changeTicket.created" 
     ... 
    } 

Pour autant que je sais que les Enregistrer appels de méthode par défaut la méthode de validation afin de savoir si les contraintes sont remplies ou non, donc l'appel de la méthode de validation est redondant. Quoi qu'il en soit, lorsque la sauvegarde est effectuée, une exception sera levée si le champ chngNr est NULL. En fait le champ ne peut pas être vide (NULL) car j'ai défini la contrainte (nullable: false).

Qu'est-ce que je fais mal ici?

Merci à l'avance,

Luis

Répondre

2

essayez ceci:

chngName (blanc: faux, nullables: false)

:-)

3

L'appel validate devrait échouer si chngNr est NULL. Certaines bases de données ne considèrent pas une chaîne vide ("") null (HSQL). Si vous liez chngNr à changeTicketInstance utilisant params d'une forme il devient attribué une chaîne vide comme valeur et dans ce cas, vous voulez que votre contrainte à:

chngNr(blank:false) 

En outre, sauf() ne lancera pas d'exception sauf si vous utilisez save (flush: true). Hibernate met en file d'attente les modifications et, à moins que vous ne vidiez, ne lèvera pas une exception réelle.

+0

Merci pour votre réponse. Le problème a été résolu en ajoutant une contrainte supplémentaire vide: false. +1 – Luixv