3

Grailsアプリケーションに取り組んでいます。Userというドメインオブジェクトがあり、Userはそのプロパティの1つとしてRoleオブジェクトのリストを持っています。ロールにはいくつかのプロパティがあり、そのうちの1つは「name」です。

ロールリストプロパティに特定の名前のロールを持つすべてのユーザーオブジェクトを見つける必要があります。

User: List<Role> roles

Role: String name

したがって、ユーザーのリストを指定して、「SUPERUSER」という名前のロールリストプロパティにロールを持つすべてのユーザーを見つける必要があります。

バックエンドのデータベースはMongoDBであるため、SQLクエリなどを使用することはできません(アプリはHibernateをまったく使用しません)。私の知る限り、CriteriaBuilderソリューションと同様に、動的ファインダーは問題ありません。

どんな助けでもいただければ幸いです。明らかなことを見落としていると思います。これは、それほど難しいことではないように思えます。少なくとも、SQLを書いていたらそうではありませんでした。

4

3 に答える 3

1

Roleが個別のドメインオブジェクトである場合、mongoは結合をサポートしていないため、直接それを行うことはできません。これがmongoで一般的に達成される方法は、ユーザーオブジェクト内にロールのコレクションを埋め込むことです。したがって、次のようにユーザーをモデル化する場合:

class User {
    List roles
    static embedded = ['roles']
}

次に、次のような条件またはw​​hereクエリを使用できるようになります。

def superusers = User.where { roles.name == 'SUPERUSER' }
于 2013-02-27T17:50:14.857 に答える
0

この場合、HQLを使用できます(テストされていないため、調整が必要な場合があります)。

def users = User.executeQuery("s from User s inner join UserRole ur on s = ur.user where ur.role = :role", [role: Role.findByName("MYROLE")])
于 2013-02-27T16:17:03.393 に答える
0

基準クエリについてはどうですか?

List superUsers = User.withCriteria {
    roles {
        eq('name', 'SUPERUSER')
    }
}
于 2013-02-27T17:12:34.207 に答える