2011-12-14 87 views
0

比方说,我有这个类被映射到的SQLServer:的Grails个createCriteria和的executeQuery

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 

我得到这个表:

enter image description here

我现在需要在JSON中呈现结果。我的问题是,我发现executeQuery太难实现了。有没有什么办法可以使用像createCriteria这样的HQL来做到这一点?

回答

0

您可以轻松地设置导致Bean的列表,然后用像杰克逊或任何东西任何框架序列他们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,然后序列化对象;)

相关问题