0

我有一个简单的 Grails 应用程序。我有几个域,例如以下。场景是 Person 有很多 Telephone(但 person 类没有电话列表作为变量:Lazy Single-Ended Associations)。

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 以满足我的要求

提前致谢

4

2 回答 2

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()
于 2015-10-14T10:14:35.860 回答
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   
于 2015-10-14T09:57:58.537 回答