我无法急切查询实体集合在Gorm / Grails 3.3.9中的工作

时间:2019-01-22 17:41:10

标签: associations gorm where eager-loading

我有一个域模型,其中OrgRoleInstance的hasMany = {sites:Site},而Site域实体的属点为= [org:OrgRoleInstance]

我不想在域对象中使用静态映射= {}子句,因为我想通过查询控制获取策略。

我设置了几个这样的单元测试,并分别设置了3个组织和一个站点

void "list with eager fetch query"() {
    given :

    def orgs = OrgRoleInstance.list(fetch:[sites:"eager"])
    println "org b.sites : " + orgs[1].sites

    println "site #2  has org as : " + (Site.list())[1].org

    expect :
    Site.count() == 3
    orgs.size() == 3
    orgs[1].getName() == "B"
    orgs[1].sites.size() == 1

}

void "where query"() {
    given :

    def orgs = OrgRoleInstance.where {
        name =~ "%B%" &&
        sites{}
    }.list()

    expect :  //actual get null in orgs
    Site.count() == 3
    orgs[0].name == "B"
    orgs[0].sites.size() == 1

}

void "criteria query " () {
    given:

    OrgRoleInstance org

    org = OrgRoleInstance.withCriteria (uniqueResult: true) {
        //eq 'name', "B"
        and {
            idEq(2)
            eq ('name', "B")
        }
    }

    def orgs = OrgRoleInstance.withCriteria {
        eq 'name', "B"
        //fetchMode 'sites', FetchMode.SELECT
        sites{}
    }

    orgs

    expect:  //actual sites is size=0
    org.id == 2
    org.sites.size() == 1

}

我在做什么错-中间测试从查询返回null,其他测试返回OrgRoleInstance,但sites属性为“空”。

我已经检查了设置,站点已正确保存,并在那里引用了org-因此域模型是正确的。

编写这些查询时我在做什么错?

PS我从多个方面尝试了where查询,这似乎可以正常工作并在结果中加载父网站。

//this one works
void "where query from the many side "() {
    given :

    def site = Site.where {
        org.id == 2
    }.list()

    expect :
    Site.count() == 3
    site.org.name == ["B"]

}

1 个答案:

答案 0 :(得分:0)

本质上单元具有新测试特征的测试域查询不起作用。

如果要测试查询,则必须编写集成测试或使用Grails控制台加载gorm env。

Related posting