Grails создать критерии и выполнить запрос - PullRequest
0 голосов
/ 15 декабря 2011

скажем, у меня есть эти классы, которые сопоставляются с 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 слишком сложным для достижения этой цели.Есть ли способ сделать это с помощью HQL, как createCriteria?

1 Ответ

0 голосов
/ 15 декабря 2011

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

...