2013-02-23 38 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') 
} 

,然後使用ID獲得職位名單,像收集所有帖子:

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

完美, 謝謝! – Chopo87 2013-02-25 12:44:45