2015-10-14 5 views
0

У меня есть простое приложение Grails. У меня есть несколько доменов, например, следующие. Сценарий: у человека много телефонов (но у человека нет списка телефонов в качестве переменной: Lazy Single-Ended Association).Grails domain Именованный запрос для списка

class Person implements Serializable { 
    .... 
} 

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

Теперь у меня есть требование, когда я должен искать человека по телефонным номерам. У меня есть список номеров телефонов. Мне нужно получить всех лиц, у которых есть хотя бы один номер этого телефона. Мне нужно написать namedQueries, но я довольно новичок в этой области. Можно ли написать именованные запросы для этого? Или мне нужно отображение, определенное в классе Person, как

set telephone 
static hasMany = [ 
     telephone: Telephone 
] 

и как бы namedQueries должны быть определены в соответствии с моим требованиям

Заранее спасибо

ответ

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 
Смежные вопросы