相互にリンクされた 3 つのクラスがあります。
最初は、ページネーションなしでクエリを作成しましたが、すべての検索結果は問題ありませんでした。しかし、今はページネーションが必要で、最初のクエリ パターンを乱したくありません。明確な結果を得る方法はありますか。
Class Department{
int id;
String name;
static hasMany = [courses:Courses]
}
Class Courses{
String courseName;
String courseCode;
static hasMany = [student:Student]
static belongsTo = [department:Department]
}
Class Student{
String studentName;
String address;
static belongsTo = [courses:Courses]
}
//controller
def list = Department.createCriteria.listDistinct{
if(params.id){
and{eq{"id",params.id}}
}
and{
courses{
if(params.courseName){
and{eq("courseName",params.courseName)}
}
}
and{
student{
if(params.studentName){
and{eq("studentName",params.studentName)}
}
}
}
}
}
実際のテーブルとドメインを示すことはできませんでしたが、関係は上記とほとんど同じです。微妙な結果に対しては非常にうまく機能しましたが、ページネーションできませんでした。いくつかの解決策を試しましたが、エラーが返されます。今までエラーを記録していません。listDistinct をページネーション パラメータに使用できないことを知りました。list は個別のパラメーターを提供しません。
プロジェクションを試みましたが、以前のようにすべての属性を取得できませんでした。それに対する解決策はありますか。3 つのテーブルのいずれかからのすべての関係を使用して、考えられるすべての属性から検索する必要があるためです。すべてのクエリを別の方法に切り替える必要がありますか?