【发布时间】:2010-06-30 00:16:43
【问题描述】:
当我使用条件查询时,结果包含延迟初始化对象的数组列表。也就是说,该列表具有处理程序org.codehaus.groovy.grails.orm.hibernate.proxy.GroovyAwareJavassistLazyInitializer 的值。
这会阻止我在其中执行任何数组操作(减号、删除等)。当我使用 GORM 方法时,我得到了实际对象类型的数组列表。如何获取条件查询中的实际对象?
- 代码如下。
availableTypes = Type.withCriteria() {
'in'("roleFrom", from)
'in'("roleTo", to)
}
availableTypes(一个数组列表)有一个值,但不是实际对象,而是带有GroovyAwareJavassistLazyInitializer处理程序的值
- availableTypes(数组列表)的值类型为 Type
availableTypes = Type.findByRoleFrom(from)
--------- 更新 ----------
我做了进一步的故障排除,这就是我发现的。可能上面的描述可能会产生误导,但我保留了它以防万一。
- 第一次使用
findAllBy时,我得到的是代理对象而不是实际的实例。然后,我通过 ajax 调用调用该方法,加载实际实例(与缓存加载有关吗??)。当我刷新页面时,它会再次加载代理
def typeFrom = Type.findAllByParty(partyFrom)
-
findAllBy在同一方法中还有另一种用法,它始终返回实际实例。
def relFrom = Relation.findAllByParty(partyFrom)
- 比较两个类时,类 Roles 的属性“party”是 1-m 关系的一部分。喜欢
class Role {
RoleType roleType
LocalDate validFrom
LocalDate validTo
static belongsTo = [party : Party ]
...
}
我知道如果我做像Party.findAll() 这样的声明,角色实例在他们访问之前将是代理。但是,当直接在类(Role)上使用 gorm 时,为什么我得到代理对象???
感谢您的帮助。
谢谢。
【问题讨论】:
-
这里的问题是什么?关于你所经历的事情有很多陈述,但很难将其提炼成一个问题
标签: grails grails-orm