1

statusesビューから呼び出された ID のリストをコントローラーに渡しています。コントローラーでは、私は単に実行しています:

def statusSelection = params.list('statuses')

createCriteria次に、ドメインクラス レコードのリストを取得するために使用しています。

MyDC.createCriteria().list(
    max: params.max,
    offset: params.offset,
    order: params.order,
    sort: querySort) {
        statuses { // hasMany statuses: Status
            or {
                statusSelection.each { // loop through params list
                    idEq(it.id)
                }
            }
        }
    }

statusこれは、ビュー内のテーブルがプロパティの並べ替えを許可するよう要求されるまで、正常に機能していました。今org.hibernate.QueryException、次のメッセージが表示されます。

関連付けパスの重複: ステータス

これは私が確信している値によるものですが、ソートをエイリアスしてステートメントquerySortを維持する方法がわかりません。or

4

1 に答える 1

1

エラーで querySort == "statuses" が発生した場合は、エイリアスを作成してその querySort を置き換えることができます。ステータスの代わりに statusSort を返すように gsp を変更する必要があります

MyDC.createCriteria().list(
max: params.max,
offset: params.offset,
order: params.order,
sort: querySort) {
    createAlias('statuses', 'statusSort') //This alias will replace the querySort 
    statuses { // hasMany statuses: Status
        or {
            statusSelection.each { // loop through params list
                idEq(it.id)
            }
        }
    }
}

ここで非常に興味深い議論を読むことができます: n 層アーキテクチャのデータベース サーバーまたはアプリケーション サーバーでの並べ替え

于 2012-08-30T18:42:36.280 に答える