[英]Grails createCriteria and using a Transient field and PagedResultsList
[英]Grails - sort by the domain relation attribute (using createCriteria())
我有两个域关系:1:n关系:
import Action
class Task {
Action actionParent
String taskName
}
和
class Action {
String actionName
}
我有任务列表,其中我有“操作名称”列,我想通过Action.actionName对此列进行排序。 现在我正在使用createCriteria()方法[我需要使用它,因为我有更多的逻辑用于过滤和排序...],但我只能按“Action.id”进行排序。 这个方法看起来像:
def criteria = Task.createCriteria();
taskList = criteria.list {
if(parameters.max != null)
maxResults(parameters.max)
if(parameters.offset != null)
firstResult(new Integer(parameters.offset))
if(parameters.sort != null && parameters.order)
order(parameters.sort, parameters.order)
}
有没有办法按关系属性对域类数据进行排序?
感谢任何重播,
圣马特奥
如果你想坚持标准方法,尝试这样的事情。 为您创建Action对象的别名,然后访问该属性以对其进行排序
def criteria = Task.createCriteria()
def taskList = criteria.list {
createAlias("actionParent","_action")
order( "_action.actionName")
}
我知道这是一个老问题,但在我的特殊情况下(想要对关联的关联字段进行排序),它只有在我将排序列直接传递给list方法时才有效:
def criteria = Task.createCriteria();
taskList = criteria.list(max: parameters.max, offset: parameters.offset, sort: parameters.sort, order: parameters.order) {
// Other code here...
}
当我试图将排序信息放入闭包本身时,Hibernate用消息org.hibernate.QueryException: could not resolve property: [Grails domain relation's relation's field] of: [Grails domain]
异常org.hibernate.QueryException: could not resolve property: [Grails domain relation's relation's field] of: [Grails domain]
。
尝试这个
def tasksList = Task.findAll()
tasksListSorted = tasksList.sort { it.actionParent.actionName }
你也可以这样做
tasksList.sort{
task1, task2 -> task1.actionParent.actionName.compareToIgnoreCase(task2.actionParent.actionName)
}
您是否尝试过使用listOrderBy * GORM命令,因此它会是这样的
def tasksList = Task.listOrderByActionName()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.