1

次の問題があります。取引があり、以下のようにします。

取引:

  1. パラメーターを持つオブジェクトが利用可能な場合は、データベースを調べます。
  2. そうでない場合は、このオブジェクトを作成します。そうでない場合は、オブジェクトを変更して更新します。

並行して実行される 2 つのトランザクション (T1 と T2) があるとします。

T1 はデータベースを調べますが、オブジェクトはありません。1 ミリ秒後、T2 はデータベースを調べますが、オブジェクトもありません。

T1 はオブジェクトをデータベースに保存し、T2 も作成します。

データベースには 1 つではなく 2 つのオブジェクトがあります。

この問題を解決できますか?

私が使用している:Hibernate + Spring + Tomcat

ありがとうございました。

4

2 に答える 2

2

1 つのサーバーにデプロイされたアプリケーションの場合、ソリューションは非常に単純です。関数に「同期」属性を与えます。これにより、この問題が発生しないことを確認できます。

ただし、このアプリケーションを複数のサーバーで実行すると、問題が発生する可能性があります。この場合、1 つの集中データベース アクセス メカニズムを考える必要があります。

これは、SQL サーバーの機能を使用して行うこともできます。データベース サーバーにストアド プロシージャを作成し、適切な分離レベルを設定します。ここでそれについて読むことができます:postgresqlストアドプロシージャの分離レベルを設定する

于 2012-07-12T08:06:17.577 に答える
0

there would be a primary key violation if two of the same objects were inserted into the database and so one of your transactions would fail to write and will roll back. just make sure the objects must be unique by placing relevant constraints on their attributes.

于 2012-07-12T08:07:20.277 に答える