【发布时间】:2011-07-07 15:41:11
【问题描述】:
第一次来到 Grails,我遇到了一个奇怪的问题,即一对多关系。
我正在创建一个 Grails 应用程序来为网站和智能手机应用程序提供服务。
我尽我所能创建一个可以处理通用操作(创建、获取、修改、列出、删除...)的父服务,我可以从中继承更具体的服务。
我面临的问题来自列表操作。我根据调用者发送给我的参数构造了一个 withCriteria 请求。
我有两个域:
class A {
static hasMany = [bs:B]
}
class B {
static belongsTo = [a:A]
}
我需要列出属于 A 对象的 B 类对象,我的通用列表操作会生成:
List objects = B.withCriteria() {
createAlias("A","A")
eq("A.id", myId)
}
一切正常,但问题是,我创建了一个通用的 toJSON() 方法,该方法从域实例创建 JSON 响应。为此,我遍历了一个字符串列表,其中包含我想在 JSON 响应中添加的域属性的名称。然后我像这样访问它们:
objects[0]."$propertyName"
如果我的对象包含对其他对象的引用,我想在 JSON 响应中添加这些对象的 id。
可以使用以下语法访问这些 ID:
objects[0].aId
但是该死的东西是空的!如果我访问它:
objects[0].a.id
我有正确的父母 ID!
我做了一些测试,如果我不通过 A 对象过滤 B 对象,那么我可以按照我想要的方式访问父 id,即:
List objects = B.withCriteria() {}
objects[0].aId
知道这里发生了什么吗?
谢谢。
【问题讨论】:
标签: grails grails-orm