2016-01-18 26 views
0

我有以下標準:格姆:過濾標準由物業相關領域

Alert.createCriteria().add(Restrictions.isNull('resolvedDate')) 

我需要一個「屬性的屬性」字段進行過濾:alert.device.room.id 喜歡的東西:

Restriction.eq("alert.device.room.id", roomId) 

如何將此限制添加到主標準?

使用嵌套閉包

Alert.createCriteria().list() { 
    isNull('resolvedDate') 

    device { 
     room { 
      idEq(roomId) 
     } 
    } 
} 

idEq(roomId)可以用eq('id', roomId)進行置換,然後用非所用:

回答

1

您可以更加的Grails的方式「使用HibernateCriteriaBuilder的DSL寫id屬性。

使用createAlias

Alert.createCriteria().list() { 
    isNull('resolvedDate') 

    createAlias('device', 'd') 
    createAlias('d.room', 'r') 
    eq('r.id', roomId) 
} 
+0

好極了!第一種方法是我想要的。謝謝! – Agorreca

+1

非常歡迎,第二種方法還有其他一些好處(能夠使用外部連接),但是,第一種方法對於您的應用程序看起來更清潔。 – tylerwal