Grails唯一约束不适用于多个字段

时间:2014-05-22 14:45:27

标签: validation grails gorm unique-constraint

我已经阅读了很多关于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

我做错了什么?

提前致谢。

1 个答案:

答案 0 :(得分:0)

可能是由于数据库级别的验证工作  和newDog.save(failOnError:true)不会立即保存狗对象

你尝试过吗? newDog.save(flush:true)

为第一只狗然后

newDogTwo.save(failOnError:true)

它应该有用