次のような状況があります。
1 つのビジネス エンティティ (BE) は、2 つのスレッドによって非同期に提供される 2 つの部分で構成されます。例: BE にはフィールド id と A、B、C があり、すべてデータベース内の 1 つのテーブルにあります。ID は、エンティティがデータベースに格納されるときにシーケンスによって生成されます。B は一意のフィールドであり、データベースには制約があります。プロセス 1 はフィールド A と B を提供します。プロセス 2 はフィールド B と C を提供します。したがって、両方のプロセスが終了すると、すべての列が入力されたテーブルに 1 つの行が表示されます。
これを機能させる良い方法は何ですか?
現在行われていること:
各プロセスでは、最初にテーブルからすべての値を選択します。ここで、列 B の値は現在のものです。(存在する場合 - これは、他のプロセスが既にその一部を保存していることを意味します)。何かある場合は、欠落している列で強化され、永続化されます。何もない場合は、持っているものを保持するだけです。ただし、これがすべて完了している間に、他のプロセスがその仕事を終了した可能性があり、エンティティを永続化すると ConstraintViolationException が発生し、hibernate がトランザクションをロールバックするようにマークします。そして、欠落している列はまだ欠落しています。