2013-07-03 25 views
0

我有兩個領域類:限制從數據庫中檢索域類之間的關係的行

class Entity { 
    static hasMany = [ 
      titles: Title 
    ] 
} 

class Title { 
    Boolean isActive 

    static belongsTo = [entity:Entity] 

    static mapping = { 
     isActive type: 'yes_no' 
    } 
} 

現在,當我打電話Entity.get(0)我想從數據庫中實體採取id = 0,但只有活動標題(其中isActive = true)。在Grails中可能嗎?我已經嘗試添加其中標題域類的靜態映射子句:

static mapping = { 
    isActive type: 'yes_no' 
    where 'isActive = Y' 
} 

static mapping = { 
    isActive type: 'yes_no' 
    where 'isActive = true' 
} 

,但它不工作。我在2.2.1版本中使用Grails

你能幫我嗎?先謝謝你。

回答

1

在這種情況下,你可以使用criteria做到這一點:

Entity.createCriteria().get { 
    eq('id', 0) 
    projections { 
    titles { 
     eq('isActive', true) 
    } 
    } 

} 

我不認爲這是可能設置一個默認凡在所有的數據庫調用該域級應用。

您也可以包裝在服務你的邏輯:

class EntityService { 
    def get(Long id) { 
    return Entity.createCriteria().get { 
     eq('id', id) 
     projections { 
     titles { 
      eq('isActive', true) 
     } 
     } 
    } 
    } 
} 
+0

好久不見。一種6K,我會很高興爲你做出這個標記:)。順便說一句,你可以使用'idEq'來簡化它。 – dmahapatro

+0

@dmahapatro嘿!我正在忙着嘗試ExtJs4。感謝您與'idEq'互補,歡呼! –

+0

不幸的是它不適合我。我仍然獲得所有頭銜。 – kpater87