2013-03-10 45 views
0

的結果進行第二次搜索,我有以下型號:的Grails:在criteria.list

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

我希望創建以下查詢:每個作者的找到最新的職位(按id)那麼只有返回後,如果他們是某一類X.

這是我多遠,這麼遠的:

def cat = Category.findByID(x); // Not yet used 

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

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

誘惑只是projections之前添加like("categorie_id", cat)

但是,這導致在獲得每個作者與類別X的最後一個職位

我需要:每個作者的最新帖子,如果它屬於類X.

換句話說,我想知道每個作者的最新帖子是否屬於類別x。

我認爲爲了做到這一點,我需要對第一個結果進行第二次搜索,但我不知道如何做到這一點。

有什麼建議嗎?

謝謝你,

Chopo

回答

0

,除非它是從格姆替你增加一個不同的你不應該定義一個id場 - 它增加了默認情況下冗長的ID,所以不需要你。此外,您的belongsTo名稱非常不標準 - 應刪除_id後綴。而什麼是處理所有這些分號;)

鑑於這一領域類:

class Post { 
    String comment 
    static belongsTo = [ 
     category: Category, 
     author: Author 
    ] 
} 

然後你就可以得到最新的每個作者的帖子與此HQL查詢指定類別(我沒有想法如何使用標準查詢來做到這一點):

def category = ... 

def posts = Post.executeQuery(
    'select p from Post p where id in (' + 
     'select max(p.id) from Post p ' + 
     'where p.category=:category group by p.author.id)', 
    [category: category]) 
+0

Dosn't只返回一個結果? (我將在明天早上測試它/ dev pc已關閉)我想要列出任何作者的最後一篇文章,並且屬於特定類別 – Chopo87 2013-03-10 21:36:15

+0

btw,分號aka hiper-semicolonophilia是衆所周知的心理狀況從多年的c + +/Java的,但我正在處理它;-) – Chopo87 2013-03-10 22:01:19

+0

我更新了答案 - 現在它返回每個作者最近的帖子,如果有一個指定的類別。 – 2013-03-10 23:33:08