带别名的GORM createCriteria OR语句

时间:2012-08-30 16:22:16

标签: hibernate grails gorm

我将一个名为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语句。

1 个答案:

答案 0 :(得分:1)

如果错误引发querySort ==“status”,那么您可以创建别名来替换该querySort。您应该更改您的gsp以返回statusSort而不是状态

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