belongsTo在每个场景中表现不同

时间:2011-12-05 14:28:09

标签: validation grails groovy gorm

场景1: 我有两个班:

发表

class Post {
String content
Date dateCreated
static constraints = {
content(blank: false)
}
static belongsTo = [ user : User ]
}

用户

class User {
// existing code here
static hasMany = [ posts : Post ]
}

这是一种经典的一对多关系。这些类的集成测试:

void testFirstPost() {
def user = new User(userId: 'joe',password: 'secret').save()
def post1 = new Post(content: "First post... W00t!")
user.addToPosts(post1)
def post2 = new Post(content: "Second post...")
user.addToPosts(post2) }

效果很好。但是如果你考虑其他两个类,比如:

情景2:

用户

class User {
    String login
    String password
    Profile profile
    Status status
    static hasMany = [ holidays : Holiday ]
    static constraints = { 
        login(unique:true,size:2..20)
        password(size:2..20) //more to be added later!
        profile(nullable:true)
        company(nullable:true)
    }
    static belongsTo = [ company : Company ]
}

公司

class Company {
    String shortName;
    String name 
    Date dateCreated
    String region
    String email
    Address address
    Status status   
    Long tel
    Long fax
    static hasMany = [ users : User]
        static constraints = {
        }
    static mapping = {
        address lazy:false
        status lazy:false
    }
}

再次经典的一对多关系。

对于这些课程,我写了这样的测试:

void testSaveUser() {
        def status1 = new Status(name:"Busy")
        status1.save(flush:true)        
        def user = new User(login:"anto",password:"anything",
            status:status1)
        assert user.save(flush:true, failOnError: true)
    }

即使这个测试也能正常工作。请注意,在第二个 User类中,我已将company字段的约束设为company(nullable:true),如果我没有将其置于上述测试({{ 1}})失败!

我得到的错误是:

testSaveUser()

即使场景1 场景2 都相同,为什么场景2 会强制我添加{{1}约束?

(请注意,我正在使用 Grails 1.3.7 并在同一版本中运行两个方案!)

提前致谢。

1 个答案:

答案 0 :(得分:1)

如果belongsTo有其他内容,则默认情况下不能为null

在您的测试中,您没有(仍)在company之前为用户设置save,因此默认约束会失败