使用Grails中的域实例查找子域

时间:2017-10-11 19:44:55

标签: grails groovy orm

在grails中,如何使用域实例找到子域

我说我有

class Family {
    Integer id
    Parent parent
}


class Parent {
    Interger id
    static hasMany = [children: Child]
}

class Child {
    String name
}

所以在控制器中,

Parent mom = Family.findById(1).parent

所以,现在,如何使用mom来获取父母name == "Child"的孩子? 它甚至可能吗?

4 个答案:

答案 0 :(得分:0)

您可以使用criteria API

bitmap = game.add.bitmapData(800, 100);
bitmapSprite = game.add.sprite(0, 0, bitmap);
bitmapSprite.fixedToCamera = true;

在此示例中,Parent.withCriteria { children { eq("name", "Bob") } } 将加入children。并且所有的父母都将被退回,并且有一个孩子叫#Bob"。

答案 1 :(得分:0)

我认为这应该有用。

     while(true) {
        System.out.println("Please enter number of dependents: ");
        try{
                int dependents = stdin.nextInt();
                if(dependents >= 0) {
                    //stops loop and moves on
                    break;
                }
                else {
                    System.out.println("Can't enter a negative number.");
                }
            }catch(InputMismatchException e){
                System.out.println("Invalid input");
                //catches input and clears
                stdin.nextLine();
           }
        }
}

但我不建议使用这种查询。 Grails有很多查询方法,你可以在这里阅读http://gorm.grails.org/latest/hibernate/manual/index.html#querying。我还向您推荐本指南http://guides.grails.org/querying-gorm-dynamic-finders/guide/index.html,它与动态查找器相比,而不是使用常规集合方法进行查询的查询。

我希望它的帮助完整

答案 2 :(得分:0)

你可以这样简单地使用闭包findAll {}:

  def childrenList=mom.findAll{it.children.each{
                   if(it.name=='child')
                      return it
                     }
                    }

这将为您提供名称为“孩子”的所有子对象的列表。

答案 3 :(得分:0)

正如@ user615274建议的那样,已接受的解决方案有效,但可能存在性能问题。

Grails闪耀的一个功能是动态查询。我会修改子域并使用动态查询。例如

由于父母" hasMany"与孩子,孩子的关系"属于"父母

class Child {
    String name

    Parent parent  
    // or static belongsTo = [parent:Parent] 
}

设置此关系后,您可以使用动态查询

def child = Child.findByParent(mom)   // return the first matching result
def children = Child.findAllByParent(mom)  // returns a list of matching result

我希望这会有所帮助。