Домен Grails Именный запрос для списка

У меня есть простое приложение Grails. У меня есть пара доменов, таких как следующие. Сценарий "Человек имеет много телефонов" (но у класса "Человек" нет списка телефонов в качестве переменной: "Ленивые однозначные ассоциации").

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()

Я бы придерживался одностороннего 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   
Другие вопросы по тегам