我已经阅读了很多关于Grails中唯一性和约束的内容(但可能还不够)
我不能使唯一约束适用于多个字段,如下所述:
http://grails.org/doc/1.3.7/ref/Constraints/unique.html
(我使用的是grails 1.3.9)
我有2个域类:
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
}
这是一个遗留数据库,因此我无法修改表格。
当我拯救一个人类时,我(只是为了测试)拯救了两只同名,品种和人类的狗
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)
}
但它无论如何都能保存2只狗而不会抱怨也不会丢失任何错误。
true
org.springframework.validation.BeanPropertyBindingResult: 0 error
true
org.springframework.validation.BeanPropertyBindingResult: 0 error
我做错了什么?
提前致谢。
答案 0 :(得分:0)
可能是由于数据库级别的验证工作 和newDog.save(failOnError:true)不会立即保存狗对象
你尝试过吗?newDog.save(flush:true)
为第一只狗然后
newDogTwo.save(failOnError:true)
它应该有用