gpt4 book ai didi

hibernate - 使用关联进行分页的 grails 中的 Hibernate Query 中的不同结果

转载 作者:行者123 更新时间:2023-12-04 18:44:42 29 4
gpt4 key购买 nike

我有三个相互关联的类(class)。

最初我在没有分页的情况下构建查询,所有搜索结果都很好。
但是现在我需要分页并且不想打扰我的初始查询模式。有什么办法可以得到不同的结果。

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)}
}
}
}
}
}

我不能给你实际的表和域,但关系与上面几乎相同。它对于dintinct结果非常有效,但无法分页。我尝试了多种解决方案,但它返回错误。到目前为止,我还没有记录任何错误。
我开始知道 listDistinct 不能用于分页参数。和列表不提供不同的参数。

我尝试了投影,但无法像以前一样检索所有属性。有没有什么解决办法。因为我需要从三个表中的任何一个中搜索所有可能的属性和所有领域。我是否需要将所有查询切换到另一种方法?

最佳答案

前段时间我在执行类似任务时遇到了困难 - 获得标准,分页和不同的协同工作,解决方案是:
1. 使用 list() 而不是 listDistinct()
2. 使用 maxResults 和 firstResult 进行分页
3. 使用投影 { distinct '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)

(代码现在没有测试)

关于hibernate - 使用关联进行分页的 grails 中的 Hibernate Query 中的不同结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17019873/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com