Aja*_*tha 4 grails groovy hibernate grails-orm
我的三个班级互相联系。
最初,我没有分页地构建查询,并且所有搜索结果都很好。但是现在我需要分页,并且不想打扰我的初始查询模式。有什么办法可以使我得到明显的结果。
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)}
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我无法为您提供实际的表和域,但是关系与上面几乎相同。对于确定的结果,它确实工作得很好,但无法分页。我尝试了多种解决方案,但返回错误。到目前为止,我还没有记录任何错误。我已经知道listDistinct不能用于分页参数。和列表未提供不同的参数。
我尝试投影,但无法像以前一样检索所有属性。有没有解决的办法。因为我需要从这三个表中的所有位置搜索所有可能的属性。我是否需要将所有查询切换到另一种方法?
小智 5
我前段时间很难完成类似的任务-使标准,分页和distinct一起工作,解决方案是:1.使用list()而不是listDistinct()2.使用maxResults和firstResult进行分页3.使用投影{unique'id'}以获取不同的结果4.在获取ID列表之后,使用getAll()方法检索实际对象
所以加入它会是:
def ids = Department.createCriteria().list() {
projections {
distinct 'id'
}
maxResults params.max
firstResult params.offset
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)}
}
}
}
}
}
return Department.getAll(ids)
Run Code Online (Sandbox Code Playgroud)
(代码尚未经过测试)
| 归档时间: |
|
| 查看次数: |
2899 次 |
| 最近记录: |