【问题标题】:GORM createCriteria OR Statement with Alias带有别名的 GORM createCriteria OR 语句
【发布时间】:2012-08-30 16:22:16
【问题描述】:

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

【问题讨论】:

    标签: hibernate grails grails-orm


    【解决方案1】:

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

    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

    【讨论】:

    • 谢谢!我最终使用了'in' 子句,但这也同样有效。很好的答案。
    猜你喜欢
    • 1970-01-01
    • 2017-08-15
    • 1970-01-01
    • 2014-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多