2011-12-14 90 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,然後序列化對象;)

相關問題