Hibernate 分离条件(GORM)上的createAlias
对于Grails项目,我需要它按照关联实体的字段进行排序。类似于按作者姓名排序的获取条目: 当前示例将失败,原因是:Hibernate 分离条件(GORM)上的createAlias,hibernate,grails,gorm,Hibernate,Grails,Gorm,对于Grails项目,我需要它按照关联实体的字段进行排序。类似于按作者姓名排序的获取条目: 当前示例将失败,原因是: org.hibernate.QueryException: could not resolve property: author.name of: Entry 这是Hibernate的常见问题,通常通过为作者引入别名来实现,例如: criteria.createAlias('author') criteria.addOrder(Order.asc('author.name'))
org.hibernate.QueryException: could not resolve property: author.name of: Entry
这是Hibernate的常见问题,通常通过为作者
引入别名来实现,例如:
criteria.createAlias('author')
criteria.addOrder(Order.asc('author.name'))
但是Grailsgorm.DetachedCriteria
没有这种方法的问题,引发了NoSuchMethodException
。我不想使用普通的hibernate.DetachedCritera,因为我需要支持用Groovy标准编写的遗留代码
如何添加这样的别名?或者如何在没有it的情况下应用这种分类
可能存在一个was来创建一个hibernate.DetachedCriteria
,添加别名,然后将其转换为gorm.DetachedCriteria
-
PS what's crazy,groovy
order('author.name','asc')
对于集成测试非常有效。仅在真正的应用程序上失败,grails run app
我相信您可以随时从GORM标准生成器获取DetachedCriteria,并使用HibernateCriteriaBuilder.GetHibernatedAttachedCriteria(查询)对其进行修改
GORM DetachedCriteria仅是基础Hibernate DetachedCriteria的构建器界面。我相信您可以随时从GORM标准构建器获取DetachedCriteria,并使用HibernateCriteriaBuilder.getHibernateDetachedCriteria(查询)对其进行修改 GORM DetachedCriteria只是底层Hibernate DetachedCriteria的构建器界面 如何添加这样的别名 正如你提到的,我们采用了分离标准 如何在没有it的情况下应用此分类 其他选项包括
withCriteria
,createCriteria
和各种其他方式。我现在能想到的最懒惰但最肮脏的方式是:
Entry.where{ }.collect()?.sort{ it.author?.name }
我想你也会尝试的。:)
如何添加这样的别名
正如你提到的,我们采用了分离标准
如何在没有it的情况下应用此分类
其他选项包括withCriteria
,createCriteria
和各种其他方式。我现在能想到的最懒惰但最肮脏的方式是:
Entry.where{ }.collect()?.sort{ it.author?.name }
我想你也会尝试的。:) 您是否已尝试使用
作者
作为关联criteria.list{author{order('name','asc')}
是的,我试过了。在这种情况下,它被忽略了。您是否已经尝试使用author
作为关联criteria.list{author{order('name','asc')}
是的,我试过了。在这种情况下,它被忽略了这是个好主意。但问题是,如果我在应用GORM标准之前这样做,这个顺序就会被忽略(我相信原始查询刚刚克隆,所以我无法将GORM内容应用于原始标准)。我不能在GORM调用之后应用它,因为crit.list{}
返回实际的列表。似乎我需要访问crit.list{}
closure中的Hibernate,就在GORM构建Hibernate条件时。@Igor:为什么不使用构造的Hibernate条件来执行列表?它是否会返回与使用GORM的crit.list()执行的查询不同的域实例?因为现有代码与此类不兼容。但现在我重写了这一部分,并使用HibernateCriteriaBuilder替代,效果很好。我应该接受你的回答,也许这是个好主意。但问题是,如果我在应用GORM标准之前这样做,这个顺序就会被忽略(我相信原始查询刚刚克隆,所以我无法将GORM内容应用于原始标准)。我不能在GORM调用之后应用它,因为crit.list{}
返回实际的列表。似乎我需要访问crit.list{}
closure中的Hibernate,就在GORM构建Hibernate条件时。@Igor:为什么不使用构造的Hibernate条件来执行列表?它是否会返回与使用GORM的crit.list()执行的查询不同的域实例?因为现有代码与此类不兼容。但现在我重写了这一部分,并使用HibernateCriteriaBuilder替代,效果很好。我可能会接受你的回答