假设我有这些映射到SQLServer的类:
class Statistic {
Servicos servico
int totalTime
Date date
static constraints = {
}
}
class Servicos {
String name
String description
static constraints = {
}
}
使用这样的SQL查询:
select name, description, media,frequencia from TvMagazinePlus.dbo.servicos as t1 join (
SELECT TOP 1000
[servico_id]
,avg([total_time]) as 'media'
,COUNT([servico_id]) as 'frequencia'
FROM [TvMagazinePlus].[dbo].[statistic] where date between now and yesterday group by [servico_id]) as t2 on t1.id = t2.servico_id
我得到这张表:
我现在需要用JSON渲染结果。我的问题是,我发现executeQuery很难实现这一点。有没有办法可以使用像createCriteria这样的HQL来实现这个目标?
答案 0 :(得分:0)
你可以轻松地在豆类列表中设置该结果,然后使用像Jackson这样的任何框架在JSON中序列化它们......
根据hibernate文档,我不知道grails但是使用Hibernate你可以使用条件来执行子查询:
http://docs.jboss.org/hibernate/core/3.3/reference/en/html/querycriteria.html
DetachedCriteria avgWeight = DetachedCriteria.forClass(Cat.class)
.setProjection( Property.forName("weight").avg() );
session.createCriteria(Cat.class)
.add( Property.forName("weight").gt(avgWeight) )
.list();
这显然会使体重大于猫平均体重的猫返回,使用子查询来获得猫的平均体重。
要将结果映射到XML / JSON可序列化bean,您只需在该条件上使用AliasToBeanResultTransformer,然后序列化您的对象;)