繁体   English   中英

Grails createCriteria和executeQuery

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM