2012-08-31 94 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