1

私はJavaでHibernateを使用してアプリケーションを作成しています。次のことをしようとしています:

  1. データベースからオブジェクトのリストをクエリし、次にオブジェクトごとに次のようにします。
  2. データベースから削除します。
  3. その上で操作を実行します。
  4. 操作が失敗した場合は、オブジェクトを変更してデータベースに挿入し直してください。

ただし、信頼性の低いデータベース接続で作業しているため、オブジェクトに対して操作を実行する (手順 3) 前に、オブジェクトをデータベースから正常に削除する (手順 2) ことが不可欠です。失敗時にオブジェクトが正常に再挿入されること (ステップ 4) は重要ですが、重要ではありません。

(より高いレベルの要件は、オブジェクトに対して操作が正常に実行された場合、データベースに残ることはできないということです。そのため、最初にオブジェクトを削除し、操作を試みる前に実際に削除されていることを確認する必要があると結論付けました。)

Hibernate のセッション、トランザクション、およびオブジェクトの状態 (「デタッチ」など) を完全には理解していません。どうすればこれを達成できますか?

ここにリストするには、セッションの開始/終了、トランザクションのコミット/ロールバック、オブジェクトの削除/マージ/永続化/保存/削除/更新の順列をあまりにも多く試しましたが、私が試みたすべてが何らかのエラーで失敗します。私は Hibernate のドキュメントを参照してきましたが、基本的に、自分が何をしているのかよく理解していないため、ここで暗闇の中でスイングしているので、どんな提案も歓迎します。

4

1 に答える 1

2

トランザクションは、基本的に、トランザクションの開始から終了までの間に実行されたすべての操作が正常に実行されるか、取り消されることを保証します。したがって、データベースの状態は、トランザクションの開始前の状態を維持する (ロールバックの場合) か、トランザクション中に行われたすべての変更 (挿入、更新、削除) を含む (コミットが成功した場合) のいずれかです。

したがって、トランザクションを開き、必要なすべての操作を実行して、トランザクションをコミットするだけです。例外が発生した場合は、トランザクションをロールバックします。データベースの状態は変更されないままになるか、トランザクション中に行ったすべての削除と再挿入が含まれます。

再挿入をあまり気にしない場合は、最初のトランザクションですべてを削除し、このトランザクションが正常にコミットされた場合は、操作と再挿入のために 1 つまたは複数の後続のトランザクションを作成することもできます。

管理されていない環境 (あなたがいると仮定します) でトランザクションを開始、コミット、およびロールバックする一般的な方法は、 ドキュメントに記載されています。

于 2013-07-14T07:32:49.073 に答える