hibernate - 基于独立条件的 createAlias (GORM)

标签 hibernate grails grails-orm

对于 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 上失败。

最佳答案

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

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

关于hibernate - 基于独立条件的 createAlias (GORM),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21935280/

相关文章:

java - 存档异常 : Could not build ClassFile

grails - 在 Grails 中,如何获取包含请求参数的请求 URI?

更新(使用新对象)列表时,Grails 代码失败,但没有找到匹配的编辑器或转换策略

Grails 3.3 执行H2脚本命令

grails - Grails:保存无效

database - varchar 列的 Grails GORM 映射约束

hibernate - JPA OneToOne 关联,其中 2 个实体使用复合主键但使用不同的列名?

java - spring mvc dao 和服务 bean 映射

java - 无法使用 Hibernate 创建实体。 SQL语法异常

grails - 最佳实践,包括 Grails 中的 Angular UI