2014-05-22 3 views
0

J'ai lu beaucoup sur le caractère unique et les contraintes dans Grails (mais peut-être pas assez)Grails contrainte unique ne fonctionne pas sur plusieurs champs

Je ne peux pas faire la contrainte unique de travailler sur plusieurs domaines comme expliqué ici:

http://grails.org/doc/1.3.7/ref/Constraints/unique.html

(J'utilise Grails 1.3.9)

I have 2 classes de domaine:

class Dog { 
    static constraints = { 
     humanSsn(unique: ['name', 'breed']) 
     //I also tried with just 2 fields, didn't work either. 
    }  

    Integer humanSsn 
    String name 
    String breed 
} 

class Human { 
    static constraints = { 
     ssn(unique: true) 
    }  
    Integer ssn 
    String name 
} 

Il s'agit d'une base de données héritée, donc je ne peux pas modifier les tables.

Quand je sauve un être humain, je (juste pour tester) sauver deux chiens avec le même nom, la race et humanSsn

def humanoInstance = new Humano(params) 
     if (humanoInstance.save(flush: true)) { 
      def newDog = new Dog() 
      def newDogTwo = new Dog() 
      newDog.name = "n1" 
      newDog.breed = "b1" 
      newDog.humanSsn = humanInstance.ssn 
      println newDog.validate() 
      println newDog.getErrors() 
      newDog.save(failOnError:true) 

      newDogTwo.name = "n1" 
      newDogTwo.breed = "b1" 
      newDogTwo.humanSsn = humanInstance.ssn 
      println newDogTwo.validate() 
      println newDogTwo.getErrors() 
      newDogTwo.save(failOnError:true) 
    } 

Mais il sauve de toute façon les 2 chiens sans se plaindre ni jeter des erreurs.

true 
org.springframework.validation.BeanPropertyBindingResult: 0 error 
true 
org.springframework.validation.BeanPropertyBindingResult: 0 error 

Qu'est-ce que je fais mal?

Merci d'avance.

Répondre

0

cela peut être dû à la validation fonctionne au niveau de la base de données et newDog.save (failonerror: true) doesnot sauver objet chien immédiatement

avez-vous essayer newDog.save(flush:true)

pour le premier chien, puis

cela devrait fonctionner

+0

Vous aviez raison, j'ai dû vider l'instance en premier. Merci! –

Questions connexes