2014-11-23 52 views
2

到目前为止查询我对面来的所有例子都朝着一个域类面向诸如:的Grails - 查询域实例的属性的属性

Account.where, Account.withCriteria, Account.findxxxx但如果我想查询一个实例的属性有什么特性?例如,如果我有c一个公司实例有一个部门d,并且我想获得该公司实例的有12名雇员(部门的财产)或更少?这个查询的代码是什么?

喜欢的东西:

c.findAllD's(such that d.numberOfEmployees <= 12) 

而且,任何人都可以点我文学上的这种基于实例的查询?我一直没有遇到它。

回答

1

最简单的方法是使联想双向的,即

class Company { 
    static hasMany = [departments:Department] 
} 

class Department { 
    Company company 
    int numberOfEmployees 

    static belongsTo = [company:Company] 
} 

然后,你可以简单地从Department月底开始您的查询,如

def c = Company.get(...) // or however you obtain your Company instance 
def departments = Department.findAllByCompanyAndNumberOfEmployeesLessThanEquals(c, 12) 
+0

虽然我们在下面声明了一个部门属于一个部门,公司?这个声明本身不会涉及到一个部门的所有者公司吗?我认为这是双向正确的? – 2014-11-23 16:50:54

+0

@AnonymousHuman这一行可能确实是多余的,但是包含它并没有任何坏处。 – 2014-11-23 16:54:25

+0

我明白了,谢谢。你用'12'作为Company.get(12)的参数,为什么? – 2014-11-23 16:55:30