2012-08-31 56 views
0

我有一些类,像这样关联的类型的所有实例:找到与其他类型

class User { 
    boolean enabled 
    String username 
} 

class ExampleClass { 
    User firstUser 
    User secondUser 
} 

我的最终目标是要找到其中enabled == true OR的User实例与ExampleClass相关的User所有实例。

代码在哪里运行我无权访问变量名称firstUsersecondUser

虽这么说,我需要能够找到与ExampleClass相关联的所有User例如,哪个变量(firstUsersecondUser)的关联已建立通过直索。我该怎么做?

UPDATE:

我能想出的最好的是在我的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") 
    } 
} 

回答

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) 
+0

“如果这个代码运行,我没有访问变量名'firstUser'或'secondUser'。” < - 引用 – ubiquibacon