2014-11-02 118 views
1

我在grails域類中有多對多的關係。計算grails中多對多關係的關係

class Book { 

    static hasMany = [tags:Tag] 

    static mapping = { 
    } 

    static constraints = { 
    } 

    static transients = [] 

    String bookTitle 
} 

class Tag { 

    static hasMany = [books:book] 
    static belongsTo = [Book] 

    static mapping ={ 
    } 
    static constraints = { 
    } 

    String name 
} 

我想添加一個瞬變,它存儲了一個書是否有任何標籤。

有沒有辦法做到這一點?例如,

def hasAnyRelation 

最終,我需要創建一個標準,顯示已標記/未標記的書籍。

+0

對於 「如果一本書有任何標籤」,你可以使用:bookInstance .tags.size()> 0 – Abs 2014-11-02 07:30:57

+0

這非常昂貴 - 加載整個實例集合只是爲了計算它們,然後將它們扔掉 – 2014-11-02 07:43:49

+0

有沒有更簡單的方法?以及標準如何? Book.createCriteria.list(){}? – Takalukia 2014-11-02 13:24:06

回答

0

創建這種類型的關係是非常糟糕的grails設計。不要以兩種方式連接多對多關係。您可以創建屬於書籍或許多書籍的標籤。但書不必知道這種關係。當您想要查詢加標籤的書籍時,只需查詢標籤即可。如果擔心性能,可以隨時緩存結果。

0

嘗試的createCriteriasize限制,像

爲標記的書籍

Book.createCriteria.list() { 
    sizeGe("tags", 1) 
} 

對無標籤的書籍

Book.createCriteria.list() { 
    sizeEq("tags", 0) 
} 
+0

而不是'isEmpty'和'isNotEmpty'呢? :) – dmahapatro 2014-11-02 17:36:10

+0

'isEmpty'和'isNotEmpty'真棒,謝謝..,。 – user1690588 2014-11-03 05:10:54

+1

工程就像一個魅力!感謝名單 – Takalukia 2014-11-04 10:09:51