[英]Grails createCriteria and executeQuery
假设我有被映射到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做到这一点?
您可以轻松地将结果设置为bean列表,然后使用诸如Jackson之类的任何框架或JSON序列化它们。
我不知道grails,但是根据hibernate文档,借助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,然后序列化您的对象;)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.