【问题标题】:Grails- Criteria builders - createCriteriaGrails - 标准构建器 - createCriteria
【发布时间】:2012-08-02 08:36:44
【问题描述】:

场景是这样的: 每个Process 都有多个ProcessingSteps

我写的代码可以在不对应ProcessingSteps的情况下获取所有进程。

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

我只想为每个Process 获取对应的ProcessingStepUpdate

我有两个域类 ProcessingStepProcessingStepUpdate

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 世界的新手!

【问题讨论】:

  • ProcesshasManyProcessingSteps,ProcessingStephasManyProcessingStepUpdates,对吗?你想如何选择,为每个Process选择哪个ProcessingStepUpdate
  • 顺便说一句,请使用hasMany/belongsTo
  • 是的。我会再次解释。每个进程都有许多处理步骤,每个processingStephasMany``ProcessingStepUpdate。我想选择哪个Process 有哪个processingSteps
  • 大部分任务对我来说仍然不清楚。 “选择”是什么意思,打印所有ProcessingSteps 以获得Process?那它是怎么连接到ProcessingStepsUpdates的呢?
  • class processingStepUpdate 只为每个processingstep 提供end-time stamp。这就是它被称为ProcessingStepUpdate 的原因

标签: grails groovy criteria


【解决方案1】:

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

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,尤其是“star-dot '*.'运算符”部分。

【讨论】:

  • groovy.lang.MissingPropertyException: No such property: processingStep for class:Process 这就是我现在得到的错误。
  • 哪个代码?在我的循环示例中没有提到“processingStep”,只有“processingSteps”(注意“s”)。
  • class Process 根本不存在。 Class ProcessingStep 有对象Process,我必须从中引用。 Class ProcessingStepUpdate 具有对象 ProcessingStep
  • 1.这(再次)与您在问题文本中写的内容(Object,而不是Process)相反。你真的应该在一开始就包含这些细节(以确切的代码引用的形式)。 2. 你没有回答我问你的所有问题,所以我无法提供帮助,对不起。
  • 我发现了我的错误:这是问题的解决方案。 //List of processes Process.list(max:1).each { def p=it println it // ProcessingStep.list(max:5).each { def test4 = ProcessingStep.createCriteria().list(){ eq("process",p) } println test4
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-19
相关资源
最近更新 更多