1

オブジェクト「Child」のコレクションを含む「Parent」という名前の単純なpojoがあります。

hibernate / jpaでは、これは単純に1対多の関連付けであり、子は親を知りません。これらの子オブジェクトは異なるタイプの親を持つことができるため、親を知らない方が簡単です(タグと親を表す子を考えてみてください。タグを持つさまざまなオブジェクトタイプ)。

ここで、親オブジェクトをWebサイトのクライアントビューに送信して、ユーザーが変更できるようにします。

そのために、Hibernate / GWT/Gileadを使用します。

ユーザーがいくつかの変更を加え、保存ボタン(ajax)をクリックすると、親オブジェクトがサーバーに送信されます。親のフィールドが変更されましたが、さらに重要なのは、コレクションで一部の子オブジェクトが追加または削除されたことです。

要約すると、Parentオブジェクトがサーバーに戻ると、コレクションに次のようになります。-idがnullであり、永続化する必要がある新しい「Child」オブジェクト-idがnullではなく、マージする必要がある変更された「Child」オブジェクト- idがnullではないが、元々は親によって所有されていない、ハッキングされた可能性のある「子」オブジェクト-子オブジェクトが欠落している(削除されている):削除する必要があります

親オブジェクト(およびそのコレクション)をどのように保存しますか?データベースから親コレクションをロードして、変更されたコレクションの各オブジェクトを比較し、ハッキングされたアイテムがないかどうかを確認しますか?古いコレクションをクリアして(孤立を削除するため)、新しい子を再度追加しますか(ただし、変更されていない子がいくつかあります)?

ありがとう

PS:私の英語で申し訳ありませんが、あなたが概念を理解していることを願っています;)

4

2 に答える 2

1

あなたのスタックの何かがあなたが話しているロジックを提供しなければなりません、そしてあなたの状況を考えるとそれはおそらくあなたです。比較を実行できるように、データソースから読み取って、オブジェクトの現在の永続状態を取得する必要があります。複数の正当なアクションで親オブジェクトとそのコレクションを同時に更新できる場合は、トランザクションの粒度とコードのスレッドセーフな性質の定義に細心の注意を払う必要があることに注意してください。

これは決して単純な問題ではなく、役立つフレームワーク機能があるかもしれませんが、特に私が区別しようとしたロジックがある場合、私が遭遇した実際の実装でこれを解決するものはまだ見つかりません正当で「ハッキングされた」データ。

親と子が別々のアクションで永続化されるように、アーキテクチャを変更することを検討できます。あなたの場合は適切ではないかもしれませんが、永続化アクションを分割し、ハッキングの問題をもう少し管理しやすくする子供向けのセキュリティを提供することで、トランザクションをより細かくすることができる場合があります。

幸運を。コーディングをやりすぎる前に、ロジックの詳細なフローチャートを描くことをお勧めします。

于 2010-01-29T10:13:19.493 に答える
0

私が見つけた最善の解決策は、手動で作成されたDTOを管理することです。DTOは、必要なデータのみをクライアントに送信します。読み取り専用モードで設定するフィールドごとに、dtoを使用してクライアントに送信する秘密鍵に基づいて署名を計算します。

DTOがサーバーに戻ってきたら、署名をチェックして、読み取り専用フィールドが変更されていないことを確認します(戻ってくるフィールドで署名を再計算し、dtoで戻ってくる署名と比較します)

読み取り専用フィールドを指定して、オブジェクトがハッキングされていないことを確認できます。

于 2010-02-16T17:12:56.360 に答える