我正在将一个名为statuses的ID列表从 View 传递到 Controller 。在 Controller 中,我只是在执行:

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语句。

最佳答案

如果在错误时引发querySort ==“statuses”,则可以创建别名来替换该querySort。您应该更改gsp以返回statusSort而不是statuss

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

您可以在这里阅读非常有趣的讨论:Sorting on database server or application server in n-tier architecture

09-06 02:19