私は現在、Grails Webアプリを実装しています。エンティティまたはトップレベルドメインオブジェクトがない限り、関連付けグラフの変更を「メモリ内」(つまりhttpセッション)で管理する必要がある複雑なフォームがいくつかあります。保存しました。
例えば
上から下へ:ドキュメント->カテゴリ->サブカテゴリ..。
要件:ドキュメント/カテゴリ/サブカテゴリへの変更は、ドキュメントが保存されるときのみ保存され、他の状況では保存されません。
私の最初のアプローチは、関連付けIDをhttpセッションに格納することでしたが、これは、セッションの状態を現在の永続的な状態と同期するDocumentController.updateアクションに多くの手がかりコードを含むことになります。
// update some abstract association
for (def Iterator it = documentInstance.association.iterator(); it.hasNext();) {
if (!session.association.contains(it.next().someEntity.id)) {
it.remove()
}
}
for (def roleTypeId in session.association) {
// add/update association
...
}
カテゴリなどのデータを実際に変更する場合、手がかりコードはさらに悪化します。つまり、変更されたカテゴリオブジェクトは、最上位のエンティティを保存するときにデタッチ/再アタッチ/マージする必要があります。
このような長期にわたる作品についてのあなたの考えに非常に興味があります。