2015-10-14 162 views
0

我有一個簡單的Grails應用程序。我有幾個域如下。情景是人有很多電話(但人類沒有一個電話列表作爲變量:懶惰單端關聯)。Grails域名列表名稱查詢

class Person implements Serializable { 
    .... 
} 

class Telephone implements Serializable{ 
    String number 
    static belongsTo = [person : Person] 
    static mapping = { 
     ..... 
     person lazy: false 
    } 
} 

現在我有一個要求,我必須通過電話號碼搜索人。我有一串字符串電話號碼。我需要得到所有至少有一個電話號碼的人。我需要編寫namedQueries,但我對這個領域很陌生。是否有可能爲此編寫命名查詢?或者我需要將在namedQueries應定義爲滿足我的要求提前

感謝Person類定義爲

set telephone 
static hasMany = [ 
     telephone: Telephone 
] 

以及如何映射

回答

2

我相信它是能夠看到的人的電話,你是正確的,一個

set telephone 
static hasMany = [ 
     telephone: Telephone 
] 

需求是但一旦定義您可以然後只是做:

static namedQueries = { 
     withSameTelephone {telephoneNumber -> 
      telephone{ eq 'number' telephoneNumber } 
     } 
    } 

並使用它像:

Person.withSameTelephone('091511234512').list() 

我認爲你需要傳遞一個列表,以便

static namedQueries = { 
     withSameTelephoneInList {telephoneNumberList -> 
      telephone{ 'in'('number' telephoneNumber) } 
     } 
    } 

,所以你可以這樣做:

Person.withSameTelephoneInList(['091511234512','091511234513','091511234514']).list() 
0

我會與單端O2M堅持,並把像一個命名查詢:

class Telephone { 

    ... 

    static namedQueries = { 
    byPerson{ Person p -> 
     eq 'person', p 
    }   
    } 
} 

,並調用它像:

Person p = Person.get 1111 
def telephones = Telephone.byPerson p 

在另一方面,你可以使用一個簡單findAllBy*查詢:

Person p = Person.get 1111 
def telephones = Telephone.findAllByPerson p