sql >> データベース >  >> RDS >> Mysql

Hibernate + ONDUPLICATEKEYロジック

    HibernateはConstraintViolationExceptionをスローする可能性があります 制約(一意の制約を含む)を破る行を挿入しようとしたとき。その例外が発生しない場合は、他の一般的なHibernate例外が発生する可能性があります-これは、Hibernateのバージョンと、使用しているデータベースのバージョンとタイプでMySQL例外をHibernate例外にマップするHibernateの機能によって異なります(すべてでテストしたわけではありません。

    flush()を呼び出した後にのみ例外が発生します 、したがって、これもtry-catchブロックに含まれていることを確認する必要があります。

    行が最初に存在することを確認するソリューションの実装には注意が必要です。複数のセッションが同時にテーブルを更新している場合、競合状態になる可能性があります。 2つのプロセスがほぼ同時に行を読み取り、行が存在するかどうかを確認します。彼らは両方ともそれがそこにないことを検出し、それから彼らは両方とも新しい行を作成しようとします。誰がレースに勝つかによっては失敗します。

    より良い解決策は、最初に挿入を試み、失敗した場合は、すでに挿入されていると想定することです。ただし、例外が発生すると、ロールバックする必要があるため、このアプローチの使用方法が制限されます。



    1. mysqlの配列変数

    2. (+)はOracle SQLで何をしますか?

    3. このCLOBフィールドのGetOrdinal関数でOutOfRange例外が発生するのはなぜですか?

    4. MySQL、MariaDB、MongoDB、PostgreSQLシステムを監視するためのカスタムグラフ-ClusterControlのヒントとコツ