次のようなクラスがいくつかあります。
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" )
}
}