groovy Grails- Criteria builders -Grails标准

b5lpy0ml  于 2024-01-06  发布在  其他
关注(0)|答案(1)|浏览(204)

场景如下:每个Process都有多个ProcessingSteps
我写的代码能够获取所有进程,而不需要对应于ProcessingSteps
我知道我漏掉了一个where子句,我想问一下我们在Grails中是如何做到这一点的。
我只想为每个Process获取相应的ProcessingStepUpdate
我有两个域类ProcessingStepProcessingStepUpdate

  1. package a.b.c
  2. public class ProcessingStep {
  3. Process process
  4. }
  5. public class ProcessingStepUpdate{
  6. static belongsTo = [processingStep: ProcessingStep]
  7. ProcessingStep processingStep
  8. }

字符串
这是我写的剧本

  1. Process.list(max:1).each {
  2. //List<ProcessingStep> test2= ProcessingStep.findAllByProcess(it)
  3. //println it
  4. def test3 = ProcessingStep.createCriteria().list() {
  5. eq("process",it)
  6. }
  7. println it
  8. it.list().each {
  9. //not telling it where to get the list from
  10. ProcessingStep.list().each { pstep ->
  11. def test4 = ProcessingStepUpdate.createCriteria().list() {
  12. eq("processingStep",pstep)
  13. // Projections are aggregating, reporting, and
  14. // filtering functions that can be applied after
  15. // the query has finished.
  16. // A common use for projections is to summarize data
  17. // in a query
  18. /* projections{
  19. groupProperty("processingStep")
  20. }*/
  21. }
  22. println pstep
  23. //List<ProcessingStepUpdate> test = ProcessingStepUpdate.findAllByProcessingStep(it)
  24. //List<ProcessingStepUpdate> test = ProcessingStepUpdate.findWhere()
  25. //println "it"
  26. }
  27. }
  28. }


我一直在这个问题上停留在一天..新的OOPS世界!

smdnsysy

smdnsysy1#

我试着猜测这个任务只是为了保护孩子的孩子。那么它是这样的:

  1. public class Process {
  2. static hasMany = [processingSteps: ProcessingStep]
  3. }
  4. public class ProcessingStep {
  5. static belongsTo = [process: Process]
  6. static hasMany = [updates: ProcessingStepUpdate]
  7. }
  8. public class ProcessingStepUpdate {
  9. static belongsTo = [processingStep: ProcessingStep]
  10. }
  11. Process.list().each{ process ->
  12. process.processingSteps.each { step ->
  13. step.updates.each {
  14. println "Process: $process, Update: $it"
  15. }
  16. }
  17. }

字符串
或甚至

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


看一下Groovy Collections,特别是在“星号'*.'运算符”部分。

展开查看全部

相关问题