【问题标题】:Grails: parent id null when objects listed by itGrails:当它列出的对象时,父ID为空
【发布时间】: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


    【解决方案1】:

    由于您的编辑而删除了一些内容。我不确定您为什么需要对此类查询使用条件。

    def car = new Car()
    car.addToWheels(new Wheel())
    car.save(flush:true)
    
    def theCar = Car.get(1)
    def wheels = car.wheels
    

    或者:

    def wheels = Wheel.findAllByCar(carInstance).
    

    或者:(我不知道你为什么想要)

    def carInstance = Car.get(carId)
    List wheels = Wheel.withCriteria {
       eq("car", carInstance)
    }
    assertTrue(wheels[0].car.id == carId)
    

    【讨论】:

    • 谢谢你的回答,但我只是想写一个简单的例子,实际上我的域已经是这样的结构了。
    • 好的,你已经有你的 A 对象了吗?如果是这样,您可以执行类似 def bs = B.findAllByA(aInstance) 的操作。我不确定您为什么需要为此使用标准。
    • 我不确定我是否明确表达了自己的问题,我将编辑我的消息并尝试更具体。
    猜你喜欢
    • 2015-02-03
    • 2020-03-03
    • 1970-01-01
    • 1970-01-01
    • 2017-03-31
    • 2011-03-17
    • 2015-02-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多