Grails:当父对象列出它时,父id为null

时间:2011-07-07 15:41:11

标签: grails gorm

第一次来到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

知道这里发生了什么事吗? 谢谢。

1 个答案:

答案 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)