我有一些看起来像这样的课程:
class User {
boolean enabled
String username
}
class ExampleClass {
User firstUser
User secondUser
}
我的最终目标是查找User
enabled == true
的所有实例,或User
的实例与ExampleClass
相关联。
如果此代码正在运行,我无法访问变量名称firstUser
或secondUser
。
话虽如此,我需要能够找到与User
相关联的所有ExampleClass
实例,而忽略哪个变量(firstUser
或secondUser
)协会是通过。我该怎么做?
更新
我能提出的最好的方法是在我的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 :(得分: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)