この質問は 2 つの部分に分かれています。最初の部分はリストのクリアに関するもので、2 番目の部分は所有者をオブジェクトに割り当てることに関するものです。
Grails のモデル内の 2 つのドメイン オブジェクト間に 1 対多の関係があります。関係はこんな感じ…
class Person {
static hasMany = [authorities: Role, locations: Location]
}
class Location {
static belongsTo = Person
}
私のアプリでは、locations
リストPerson
が完全に更新され、ユーザー アクションの新しいリストに置き換えられます。Location
さらに、関連付けられているオブジェクトとは関係なく、オブジェクトのリストを取得しますPerson
。現在ログインしているユーザーを取得することで、それらを適用する人を解決します。これは、私が呼び出したものactivePerson
であり、私の目的には問題ありません。
私がやりたいことは、既存の場所をすべて削除し、新しい場所をactivePerson
すべて挿入して、それらを に関連付けるactivePerson
ことです。Person
この時点で保持したくないプロパティがたくさんあるので、子の場所が変更されたという理由だけで親オブジェクト全体を保存することは避けたいと思います。
リストを反復処理activePerson.locations
して 1 つずつ削除し、GORM/Hibernate に依存してクエリをまとめてバッチ処理し、最後にフラッシュすることを考えました。これは力ずくのように思えますが、うまくいくかもしれません。メソッドか何か似たようなものがあるclearLocations
と思っていたのですが、見つかりません。
を新しいリストに置き換えてactivePerson.locations
を呼び出すとactivePerson.save(flush:true)
、GORM は既存の行の削除を処理しますか?
次に、新しいLocation
オブジェクトを に配置しactivePerson
ます。もう一度入力しactivePerson.locations
て全体を保存することはできますが、できればそれは避けたいと思います。belongsTo
それらを個別に保存することはできますが、各Location
オブジェクトを設定するにはどうすればよいですか?
要約すると:
- 1 対多のコレクションの多側にあるリストをクリアするにはどうすればよいですか?
- 独立したオブジェクトを親オブジェクトに関連付けて個別に永続化するにはどうすればよいですか?
ありがとう