Spring Boot アプリケーションの Web ソケット サーバーを WEBRTC シグナリング サーバーとして稼働させています。
このサーバーは、さまざまなクライアント ソケットを介して、サーバーとの間でローテーションされるメッセージに基づいて、データベースにデータを記録する必要があります。
2 つ以上のピアを使用してクライアント側から電話会議を試行し、ブレークポイントを使用してデバッガーとしてシグナリングを実行している間、シナリオは正常に完了し、データベースは期待どおりに更新され、電話会議が行われました。
しかし、デバッグとブレークポイントなしでサーバーを実行すると、SQL エラーが発生します。
Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1; statement executed: HikariProxyPreparedStatement@1623454983 wrapping com.mysql.cj.jdbc.ClientPreparedStatement:
delete from my_table where my_table_id='601cbe2b-6af2-4e82-a69c-52b92d30686c'; nested exception is org.hibernate.StaleStateException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1; statement executed: HikariProxyPreparedStatement@1623454983 wrapping com.mysql.cj.jdbc.ClientPreparedStatement:
delete from my_table where my_table_id='601cbe2b-6af2-4e82-a69c-52b92d30686c'
私は Spring JPA を使用しており、呼び出しフローのデータを保持するために、エンティティ データとそのすべてのネストされたリストとリレーショナル エンティティ オブジェクトを入力した後、Web ソケットが受信したすべてのメッセージで保存機能を呼び出しています。
conferenceRepository.save(conference);
エラーは、データベース上でランダムな順序で同時に実行されているクエリが原因であると思いますが、データはデータベース内にまだ存在していません。
デバッグ モードと同様に、あるブレークポイントから別のブレークポイントに移動するのに時間がかかります。これにより、データの永続性が保証されます。
しかし、私は問題について完全には確信が持てません。
同時データベース呼び出しと更新を適用し、同時 Web ソケット関連メッセージのデータベースでデータが適切に保存および永続化されることを確認する最適な方法はありますか?