関連するいくつかのタイプの数十万のエンティティに対してバッチ プロセスを実行するプログラムを作成しています。私はもともと、永続化ごとに 1 つのトランザクションでこれを行っていました。これは非常に遅いように見えたので、 http://docs.jboss.org/hibernate/core/3.3/reference/en/html/batch.htmlに記載されている方法で、より長いトランザクションと時折のフラッシュを使用して、やや単純なバッチ更新を試みました。+クリアします。固有のフィールド制約があるため、一部のエンティティ タイプで ConstraintViolationException が発生しています。ただし、既存のインスタンスを確認する方法がわかりません。現在、衝突をリストする基準がありますが、同じトランザクション内で saveOrUpdated したエンティティが返されないようです。
作成された例が役立つかもしれません:
エンティティ Family, Person, Name
Family has many Persons (One to Many)
Persons は多くの名前を持ち、異なる Person は同じ Name を持つことができます。(多対多)
私の更新には、家族とその人物と名前の永続化が含まれていますが、名前を重複排除する方法がわかりません (データベース内の既存の名前または同じ更新バッチ内の別の名前と衝突する可能性があります)。休止状態の外で新しいエンティティの一意の制約フィールドを追跡することはできましたが、これはおそらく必要ないと思いました。データベースとコミットされていない変更の両方で重複をチェックする組み込みの方法はありますか? constraintviolationexception を使用した Hibernate バッチ更新を見ましたが、通常のコードパスで例外を使用することは好きではありません。ありがとうございます。