分离标准(GORM)上的createAlias

时间:2014-02-21 13:04:15

标签: hibernate grails gorm

对于Grails项目,我需要按相关实体的字段进行排序。像获取条目按作者姓名排序:

def crteria = new DetachedCriteria(Entry)
criteria.list {
  order('author.name', 'asc')
}

当前示例将失败:

org.hibernate.QueryException: could not resolve property: author.name of: Entry

这是Hibernate的常见问题,通常是通过引入author的别名来完成的,例如:

criteria.createAlias('author')
criteria.addOrder(Order.asc('author.name')) 

但Grails gorm.DetachedCriteria没有这种方法的问题会引发NoSuchMethodException。而且我不想使用普通的hibernate.DetachedCritera,因为需要支持使用Groovy标准编写的遗留代码。

我如何添加这样的别名?或者如何应用这种类型呢?

也许有人要创建hibernate.DetachedCriteria,添加别名,然后将其转换为gorm.DetachedCriteria

-

PS什么是疯狂的,groovy order('author.name', 'asc')适用于集成测试。仅在真实应用grails run-app上失败。

2 个答案:

答案 0 :(得分:3)

我相信你可以随时从GORM标准构建器获取DetachedCriteria并使用HibernateCriteriaBuilder.getHibernateDetachedCriteria(query)修改它。

GORM DetachedCriteria只是底层Hibernate DetachedCriteria的构建器接口。

答案 1 :(得分:1)

  

我如何添加这样的别名?

正如您所提到的,我们在DetachedCriteria中cannot

  

如何应用此类型?

其他选项包括withCriteriacreateCriteria以及其他各种方式。我现在能想到的最懒惰但最脏的方式是:

Entry.where{ }.collect()?.sort{ it.author?.name }

我认为你也会尝试过。 :)