1

現在、クエリの結果をリストに結合する必要がある grails プロジェクトに取り組んでいます。問題は、クエリの結果が等しい値を返すインスタンスがあり、エラー メッセージが表示されることです。同じ識別子の値を持つ別のオブジェクトが既にセッションに関連付けられています。

これが私のコードです:

List permissions = []
            cmd?.role.each{ role ->
                permissions.add(RolePermission.executeQuery("select distinct rp.permission from RolePermission rp where rp.role = ?",[Role.get(role.toLong())]))
            }

ここでのオブジェクト ロールには 2 つの異なるロール名が含まれる場合があり、場合によっては、これらのロール名に存在する権限が同じです。

結果から一意の値のみを取得できるようにクエリを変更するにはどうすればよいですか? 私はdistinctを使用しようとしましたが、うまくいきませんでした。

助けてください!

ありがとう!

4

1 に答える 1

1

これがあなたがやろうとしていることかどうかはわかりませんが、あなたの説明から、これだと思います。以下の行は、渡されたロールを反復処理し (これらは構文からのロール ID であると想定しています)、ロール ID ごとにロールの RolePermission を見つけます。見つかった各権限は、一覧として権限に追加されます。したがって、最後に RolePermissions のリストが必要です。

さて、私が理解していないのは、あなたが探している明確さです。Role は複数の RolePermission を返すことができ、返された RolePermissions が最終リストで一意であることを確認しようとしていると言っていますか? その場合は、リストをセットとして返すことができます (つまり、権限をセットとして返す)。私の理解が足りないところを教えてください。

def permissions = cmd?.role.collect{RolePermission.findByRole(Role.get(it.toLong()))}
return permissions as Set

または、基準を使用することもできます。

def c = RolePermission.createCriteria()
def results = c.listdistinct () {
  roles {
    'in'("id", cmd?.role as List) 
  }
}

これをコンパイラで実行しませんでしたが、動作するはずです。

于 2012-07-30T03:43:00.670 に答える