Grails - 标准构建器 - createCriteria

问题描述 投票:0回答:1

场景是这样的: 每个

Process
都有多个
ProcessingSteps

我编写的代码能够获取所有进程,而无需对应

ProcessingSteps

我知道我缺少一个 where 子句,我想问一下在 Grails 中我们如何做到这一点。

我只想获取每个

Process
对应的
ProcessingStepUpdate

我有两个域类

ProcessingStep
ProcessingStepUpdate

package a.b.c
public class ProcessingStep {
    Process process
}

public class ProcessingStepUpdate{
static belongsTo = [processingStep: ProcessingStep]
ProcessingStep processingStep
}

这是我正在写的脚本

Process.list(max:1).each {
    //List<ProcessingStep> test2= ProcessingStep.findAllByProcess(it)
    //println it
    def test3 = ProcessingStep.createCriteria().list() {
        eq("process",it)
    }
    println it

    it.list().each {
        //not telling it where to get the list from 
        ProcessingStep.list().each { pstep ->
            def test4 = ProcessingStepUpdate.createCriteria().list() {
                eq("processingStep",pstep)

                // Projections are aggregating, reporting, and
                // filtering functions that can be applied after
                // the query has finished.
                // A common use for projections is to summarize data
                // in a query
                /* projections{
                    groupProperty("processingStep")
                }*/
            }
            println pstep
            //List<ProcessingStepUpdate> test = ProcessingStepUpdate.findAllByProcessingStep(it)
            //List<ProcessingStepUpdate> test = ProcessingStepUpdate.findWhere()
            //println "it"
        }
    }
}

我一天之内就被这个问题困扰了..对 OOPS 世界来说是个新手!

groovy grails grails-orm criteria
1个回答
0
投票

我会尝试猜测任务只是迭代孩子的孩子。然后就是这样的:

public class Process {
  static hasMany = [processingSteps: ProcessingStep]
}

public class ProcessingStep {
  static belongsTo = [process: Process]
  static hasMany = [updates: ProcessingStepUpdate]
}

public class ProcessingStepUpdate {
  static belongsTo = [processingStep: ProcessingStep]
}


Process.list().each{ process -> 
  process.processingSteps.each { step ->
    step.updates.each {
      println "Process: $process, Update: $it"
    }
  }
}

甚至

def updates = Process.list()*.processingSteps.flatten()*.updates.flatten()
println updates.join('\n')

看看 Groovy Collections,尤其是“星点'*'”。操作员”部分。

© www.soinside.com 2019 - 2024. All rights reserved.