5

ゴール

  1. CREATE TEMPORARY TABLEネイティブ SQL を使用せずに Hibernateでステートメントを呼び出します。つまり、HQL または Hibernate API のみを使用します。
  2. オブジェクトを一時テーブルに保存します。
  3. 既存のテーブルと一時テーブルを利用するストアド プロシージャを呼び出します。
  4. DROP終了時の一時テーブル。(必須ではないことはわかっていますが、そうするのは良い習慣だと思います。)

バックグラウンド

  1. 私は SQL に精通していますが、Hibernate は初めてです。
  2. プロジェクトで Hibernate を使用せざるを得なくなったのは、誰かの決定が原因です。
  3. Web フォームを Oracle データベースに保存します。
  4. Web フォームには、各セルに 1 つずつテキスト フィールド (他の人が設計したもの) でいっぱいのテーブルが含まれています。
  5. ユーザーが をクリックしたときSave、値は単一のトランザクションで保存する必要があります。
  6. Web フォームは、データベース ビューによってバックアップされます。
  7. データベース ビューは、EAV パターンを使用してデータベース テーブルから作成されます。(これは、列が何らかの形で動的であるためです。)
  8. Web フォームの各テキスト フィールドは、データベース テーブルの 1 つの行によってモデル化されます。
  9. Web フォームを表示するSELECTには、ビューでステートメントを使用します。
  10. Web フォームの更新では、ビューのトリガーUPDATEを呼び出すビューのステートメントを使用します。INSTEAD OF
  11. 変更された値のみが更新されます。更新ごとに監査証跡があります。
  12. ユーザーの通知なしに別のユーザーによっていずれかの値が更新された場合、トランザクションはロールバックされます。このようなシナリオの例を次に示します。ユーザーが Web フォームを表示すると、別のユーザーが同じフィールドを更新し、最初のユーザーがフィールドを更新して Web フォームを送信したとき(I)の値が aになります。4(II)5 (III)2

当初提案されたソリューション

  1. AJAX (jQuery) を使用してテキスト フィールドの変更を検出し、ユーザーが変更したものだけを送信します。
  2. ただし、別のユーザーによる変更は、データベースで検出する必要があります。

より適切に機能するはずのソリューション

  1. ユーザーが をクリックSaveすると、一時テーブルが作成され (一時テーブルは現在のセッション/接続でのみ表示されるテーブルであり、セッションが閉じられるか切断されると自動的に削除されます)、オブジェクト (セル) を一時テーブルに保存します。
  2. 取引を開始します。
  3. 既存のテーブルの一部をロックします (パフォーマンスのために、関連する行のみをロックします)。
  4. 提出されたデータを既存のデータと比較します。
  5. 気付かない変更が行われた場合は、トランザクションをロールバックします。
  6. 必要な行を更新します。
  7. トランザクションをコミットし、テーブルのロックを解除します。
  8. 一時テーブルをドロップします。

何かアイデアはありますか?

4

1 に答える 1

1

これは正確な要件には答えませんが、答えの試みがなかったことを考えると... http://csvjdbc.sourceforge.net/のようなものを使用して一時的なCSVテーブルを使用することを検討しましたか?

休止状態を介して行う要件には準拠していませんが、データベースに依存せず、クロスプラットフォームです。

于 2011-06-18T21:06:40.263 に答える