0

これはおそらく「設計」またはスタイルの問題です。Hibernate トランザクションがどれほど複雑である必要があるか、または複雑になる可能性があるかを検討しています。Hibernate を使用してメッセージをデータベースに永続化するアプリケーションを使用しています。

メッセージ POJO を構築するには、メッセージから 1 対多の関係をそれぞれの永続オブジェクトに分解する必要があります。たとえば、メッセージには「city」フィールドが含まれています。メッセージから都市が抽出され、データベースで同等の都市オブジェクトが検索され、結果のオブジェクトがメッセージ POJO に追加されます。これはすべて、1 つのトランザクション内で行われます。

  • 取引開始
  • 重複のテスト
  • 都市オブジェクトを取得する
  • メッセージ オブジェクトの setCity(cityObject)
  • 国オブジェクトを取得する
  • メッセージ オブジェクトの setCountry(countryObject)
  • メッセージ オブジェクトを永続化する
  • commit トランザクションの終了

実際、実際のトランザクションはかなり複雑です。これは合理的な構造ですか、それとも各タスクを 1 つのトランザクション内で完了する必要がありますか (1 つのトランザクション内のすべてのタスクではなく)? 2 番目の質問は、トランザクション内のタスクを設計する際のベスト プラクティスに関連していると思います。参照整合性のためにいくつかのタスクをグループ化する必要があることは理解していますが、常にそうであるとは限りません。

4

3 に答える 3

1

複数のトランザクションは、単一のトランザクションが失敗する可能性があるため、DB がそれらの間で愚かな状態のままにされない場合にのみ意味があります。ネストされたトランザクションは、アクティビティのブロックがアトミックである必要があり、トランザクション全体が他のアトミック ユニットのいずれかに依存している場合に意味があります。

于 2012-06-14T12:41:19.377 に答える
1

トランザクションは、技術的な複雑さではなく、ビジネス要件に従ってグループ化する必要があります。ユニットとして一緒に成功または失敗しなければならない N 個の操作がある場合、コードはそれをサポートする必要があります。これは、技術的なものよりもビジネス上の考慮事項である必要があります。

于 2012-06-14T12:38:15.550 に答える
1

外側のトランザクション境界内に何を入れても、問題は各アクションを正常にロールバックできるかどうかです。

関連するアクションを境界内にまとめて、できるだけシンプルに保ちます。

于 2012-06-14T12:39:11.897 に答える