Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate 分离条件(GORM)上的createAlias_Hibernate_Grails_Gorm - Fatal编程技术网

Hibernate 分离条件(GORM)上的createAlias

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'))

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

当前示例将失败,原因是:

org.hibernate.QueryException: could not resolve property: author.name of: Entry
这是Hibernate的常见问题,通常通过为
作者
引入别名来实现,例如:

criteria.createAlias('author')
criteria.addOrder(Order.asc('author.name')) 
但是Grails
gorm.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替代,效果很好。我可能会接受你的回答