0

私は単純な Grails アプリケーションを持っています。次のようなドメインがいくつかあります。シナリオは、Person が多くの Telephone を持っている (ただし、Person クラスには変数として Telephone のリストがない: Lazy Single-Ended Associations) です。

class Person implements Serializable {
    ....
}

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

今、私は電話番号でその人を検索しなければならないという要件があります。文字列の電話番号のリストがあります。その電話番号を少なくとも 1 つ持っているすべての人を取得する必要があります。私は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 に答える