簡體   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