Grails createCriteria和executeQuery

时间:2011-12-14 22:22:08

标签: sql grails hql render

假设我有这些映射到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

我得到这张表:

enter image description here

我现在需要用JSON渲染结果。我的问题是,我发现executeQuery很难实现这一点。有没有办法可以使用像createCriteria这样的HQL来实现这个目标?

1 个答案:

答案 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,然后序列化您的对象;)