第一次来到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响应。为此,我遍历一个String列表,其中包含我想在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
知道这里发生了什么事吗? 谢谢。
答案 0 :(得分:0)
因为您的修改而删除了一些内容。我不确定为什么你需要使用这种查询的标准。
def car = new Car()
car.addToWheels(new Wheel())
car.save(flush:true)
def theCar = Car.get(1)
def wheels = car.wheels
OR:
def wheels = Wheel.findAllByCar(carInstance).
或:(我不知道你为什么要这样做)
def carInstance = Car.get(carId)
List wheels = Wheel.withCriteria {
eq("car", carInstance)
}
assertTrue(wheels[0].car.id == carId)