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))
}
}