使用createCriteria和基于belongsTo属性的订单

时间:2012-09-18 16:12:54

标签: grails belongs-to createcriteria

我有下一个计划:

class UserProfile {
    String title
    String firstName
    String lastName 
    static belongsTo = [user:User]
    static constraints = {
            user nullable:true , unique:true
            title nullable:true, blank:true
            firstName blank:false
            lastName nullable:true, blank:true
    }
}

class User {
    String username
    String password
    boolean enabled 
    String email    
    static constraints = {
        username size:6..40, blank:false, nullable: false, unique: true
        email email:true, size:6..40, blank:false, nullable: false, unique: true
        password size:5..64, password:true, blank:false, nullable: false
    }   
    String toString(){username}
}

我需要一个由拥有该用户的电子邮件订购的UserProfile列表!

我试试:

UserProfile.createCriteria().listDistinct({
    if(params.orderBy){
        if(params.orderBy=="email"){
        //the exception says that the element has no such property to both cases    
            order("user.email", ascDesc)
            //order("email", ascDesc)               
        }else{
            order("${params.orderBy}", ascDesc)
        }
    }

})

因此,当我想通过电子邮件订购时,异常说该元素对两种情况都没有这样的属性。注意:ascDesc是变量String,可以是ascdesc

2 个答案:

答案 0 :(得分:1)

如果你添加

createAlias('user', 'u')

到标准结束的顶部,然后您应该可以按'u.email'订购。

答案 1 :(得分:1)

if (params.orderBy == "email") { 
    user { 
        order ("email", ascDesc) 
    } 
}

也可以在没有手动创建别名的情况下工作