列表的 Grails 域命名查询

Grails domain Named query for a list

我有一个简单的 Grails 应用程序。我有几个域,例如以下。场景是人有很多电话(但是人 class 没有电话列表作为变量:惰性单端关联)。

class Person implements Serializable {
    ....
}

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

现在我有一个需求,我必须通过电话号码搜索这个人。我有一个字符串电话号码列表。我需要找到所有至少拥有该电话号码之一的人。我需要编写 namedQueries,但我对这个领域还很陌生。是否可以为此编写命名查询?或者我是否需要在 Person class 中定义为

的映射
set telephone
static hasMany = [
        telephone: Telephone
]

以及应如何定义 namedQueries 以满足我的要求

提前致谢

我会坚持使用单端 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   

我相信它能够看到来自某人的电话你是对的

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