2011-12-14 3 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. Моя проблема в том, что findQuery слишком сложно выполнить. Есть ли способ, которым я могу это сделать, используя HQL, например createCriteria?

ответ

0

Вы можете легко установить этот результат в списке бобов, а затем сериализации их в формате JSON с любой структурой, как Джексон или что-нибудь ...

Я не знаю, 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 сериализуемого боб вы можете просто использовать AliasToBeanResultTransformer по этому критерию, а затем сериализации ваших объектов;)

Смежные вопросы