Hibernate 集合不知道FetchMode

Hibernate 集合不知道FetchMode,hibernate,grails,gorm,hibernate-criteria,Hibernate,Grails,Gorm,Hibernate Criteria,我有以下域关系: A hasMany = [bs: B] B belongsTo = [a:A, c:C] C hasMany = [bs: B] 当我在Thread.start{}中执行以下查询时,一切都很好(我可以通过以集合作为参数调用的方法访问整个集合): 但是,如果我对bs集合进行如下筛选: def aList = A.withCriteria { fetchMode('bs', FetchMode.JOIN) fetchMode('bs.c', FetchMode.J

我有以下域关系:

A hasMany = [bs: B]
B belongsTo = [a:A, c:C]
C hasMany = [bs: B]
当我在
Thread.start{}
中执行以下查询时,一切都很好(我可以通过以集合作为参数调用的方法访问整个集合):

但是,如果我对
bs
集合进行如下筛选:

def aList = A.withCriteria {
    fetchMode('bs', FetchMode.JOIN)
    fetchMode('bs.c', FetchMode.JOIN)
    isNotNull('property')
    bs {
        eq('property', C.get(1))
    }
}

我获取
无法延迟初始化角色集合:a.bs,尝试访问
列表.bs时没有会话或会话关闭
。我做错什么了吗?在这两种情况下都会生成相同的SQL…

您使用的是哪种版本的Grails?您在哪里调用此查询?请向我们提供有关错误上下文的更多详细信息,当您使用withCriteria时确实会发生错误,或者在稍后尝试访问
bs
时会发生错误?此外,stacktrace将有助于定位错误行。有一个调用Thread.start{}的控制器,在这个线程中调用了一个服务方法。查询是在此服务方法中生成的。结果被传递给同一服务中的另一个方法,该方法访问结果的
bs
。这就是访问
bs
时发生错误的地方。为什么需要此线程。开始?旧代码。。。但这个想法是,用户点击一个URL,启动一个长期运行的过程。因此,不会让页面加载/超时,而是向用户显示一条消息,上面写着“作业已启动”。
def aList = A.withCriteria {
    fetchMode('bs', FetchMode.JOIN)
    fetchMode('bs.c', FetchMode.JOIN)
    isNotNull('property')
    bs {
        eq('property', C.get(1))
    }
}