我找到了grails标准,并希望自定义排序选项。
E.g。我有域预订,我想制定一些标准:
Book.createCriteria().list {
//some code like ilike('name', 'book')
...
order(params.sort, params.order)
}
我想制定具体的排序规则,例如name.trim()
。
我该怎么做?
答案 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:使用此类方法可能会导致迁移挑战。
希望有所帮助