2013-02-23 4 views
2

У меня есть следующая таблица/модель:Grails: Использование результатов Критериев + проекции как фильтр на исходной таблице

class Post { 
    int id; 
    String comment; 
    static belongsTo = [category_id:Category]; 
} 

Я хотел бы создать запрос, который может отфильтровать последний Post (высший id) за Category. Я хочу результаты в форме List<Post>.

Другими словами (я считаю) в SQL запрос будет выглядеть следующим образом:

SELECT * 
FROM 
    Post AS source 
    JOIN (
    SELECT MAX(id) AS id, category_id 
    FROM Post 
    GROUP BY category_id 
) AS filter 
    ON source.id = filter.id; 

Если я правильно понимаю, первый шаг заключается в использовании HibernateCriteriaBuilder:

def c = Post.createCriteria(); 
    def results = c.list { 
    projections { 
     groupProperty("category_id", "myid") 
     max("id", "version") 
    } 
    } 

Так мой вопрос состоит из двух частей:

  1. Я нахожусь на правильном пути?
  2. Как использовать объект результатов для получения массива List<Post>?

    (что-то вроде: def latest = Post.FindAllByXXX(result);)

ответ

6

Да, вы на правильном пути. Я хотел бы также добавить ID свойства для Почты моих прогнозов:

projections { 
    property('id') 
} 

, а затем собрать все сообщения, используя идентификатор, чтобы получить список сообщений, что-то вроде:

def latestPosts = results?.collect{Post.read(it[0])} 
+0

Совершенных , Благодаря! – Chopo87

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

  • Нет связанных вопросов^_^