自定义条件排序

时间:2014-05-02 12:51:41

标签: grails criteria

我找到了grails标准,并希望自定义排序选项。

E.g。我有域预订,我想制定一些标准:

Book.createCriteria().list {
    //some code like ilike('name', 'book')
    ...

    order(params.sort, params.order)
}

我想制定具体的排序规则,例如name.trim()

我该怎么做?

1 个答案:

答案 0 :(得分:1)

根据提供的解决方案here,通过扩展hirbernate Order类,您可以自定义它以接受函数并将其与createCriteria一起使用。 我不会感到惊讶,如果有一个更好更简单的方法,因为这个来源很老,而且Grails比这个更酷:D

首先你需要一个扩展Hibernate Order的类:

原文:spostelnicu

public class OrderBySqlFormula extends Order {
    private String sqlFormula;

    protected OrderBySqlFormula(String sqlFormula) {
        super(sqlFormula, true);
        this.sqlFormula = sqlFormula;
    }

    public String toString() {
        return sqlFormula;
    }

    public String toSqlString(Criteria criteria, CriteriaQuery criteriaQuery) throws HibernateException {
        return sqlFormula;
    }

    public static Order sqlFormula(String sqlFormula) {
       return new OrderBySqlFormula(sqlFormula);
   }


}

然后你可以将这个类的实例传递给你的createCriteria:

def ls = Domain.createCriteria().list {
       order OrderBySqlFormula.sqlFormula("TRIM(name)")
}

注意1:只要基础数据库接受它,您就可以将任何公式传递给sqlFormula。

注意2:使用此类方法可能会导致迁移挑战。

希望有所帮助