查找与其他类型关联的类型的所有实例

时间:2012-08-31 19:39:49

标签: grails

我有一些看起来像这样的课程:

class User {
    boolean enabled
    String username
}

class ExampleClass {
    User firstUser
    User secondUser
}

我的最终目标是查找User enabled == true的所有实例,或User的实例与ExampleClass相关联。

如果此代码正在运行,我无法访问变量名称firstUsersecondUser

话虽如此,我需要能够找到与User相关联的所有ExampleClass实例,而忽略哪个变量(firstUsersecondUser)协会是通过。我该怎么做?

更新

我能提出的最好的方法是在我的User域类中使用此方法。我上面给出的示例我有一个ExampleClass,它有多个User类型的字段。实际上,我有多个类,其中包含多个User类型的字段。这就是为什么我从传入的对象中获取域类而不是只键入ExampleClass

static List findAllEnabledOrAssociatedWith( Object obj = null ) {
    if( obj?.id ) { // Make sure the object in question has been saved to database.
        List list = [] 
        obj.domainClass.getPersistentProperties().each {
            if( it.getReferencedPropertyType() == User ) {
                def propertyName = it.getName()
                list += User.executeQuery( "SELECT DISTINCT ${propertyName} FROM ${obj.class.getSimpleName()} obj INNER JOIN obj.${propertyName} ${propertyName} WHERE obj =:obj", [ obj: obj ] )
            }
        }
        list.unique()
        return User.executeQuery( "SELECT DISTINCT users FROM User users WHERE users.enabled=true OR users IN(:list)", [ list: list ] )
    } else {
        return User.executeQuery( "SELECT DISTINCT users FROM User users WHERE users.enabled=true" )
    }
}

1 个答案:

答案 0 :(得分:0)

def sql = '''
    from 
        User u, 
        ExampleClass ex 
    where 
        u.enabled = 1 or (u = ex.firstUser or u = ex.secondUser)'''
def users = User.findAll(sql)