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.
Vous aviez raison, j'ai dû vider l'instance en premier. Merci! –