在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"
的孩子?
它甚至可能吗?
答案 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
我希望这会有所帮助。