使用DetachedCriteria的list方法按嵌套属性排序报错该如何解决
异常原因
你调用criteria.list()时传入的sort参数默认仅会匹配根实体UserRole的直接属性,不会自动识别你提前创建的关联别名对应的嵌套属性,因此会抛出could not resolve property的异常。
解决方法
放弃使用list方法的sort、order参数,手动为Criteria添加排序规则即可,示例代码如下:
// 保留你之前创建关联别名的逻辑 criteria.createAlias("user", "user") // 手动添加排序规则,注意前缀要和你创建的别名保持一致 if (orderDir == 'asc') { criteria.addOrder(Order.asc(sort)) } else { criteria.addOrder(Order.desc(sort)) } // 调用list时仅传入分页参数 def userRoleList = criteria.list(max: params.length, offset: params.start)
注意事项
- 排序字段
sort的前缀必须和你创建的别名完全匹配:你创建的别名为user,sort参数传user.username或user.enabled即可正常识别 - 需保证
createAlias方法在添加排序规则、调用list方法之前执行,且操作的是同一个Criteria实例
内容的提问来源于stack exchange,提问作者Alejandro Pacheco Tejeda
相关产品推荐
相关产品推荐

