2011-10-21 1 views
0

私たちのアプリケーションは、既存のレコードのセットを置き換えるレコードのリストを受け取ります。各レコードは、シーケンスに基づく主キーと、別のフィールドの一意の制約を持ちます。これは、他のフィールドの外部キー(つまり代替キー)です。Hibernateを使用して一連のレコードを置き換える正しい方法は何ですか

それはこのような何かを行く:

for each old record 
     delete the old record 
    next 

    for each new record 
     insert new record 
    next 

問題は、Hibernateは、削除する前に挿入を実行し、その結果、ユニーク制約違反を上げているということです。新しいレコードには古いものと同じ代替キーがあります。

一意の制約を削除しても問題ありません。

このようなことを行う正しい方法は何ですか?

+0

削除が発生した後にEntityManagerをフラッシュしましたか? –

答えて

0

つの提案:

  1. あなたはこれがあなたの実装に依存するデータベース内のレコードを「置き換え」になる、マージを使用することができます。
  2. 両方のfors間のすべての変更をフラッシュしようとすることができます。
+0

フラッシングは本当に問題を解決しました。ありがとう – DaveRlz

+0

実際には、フラッシングは問題を解決しますが、私は事を正しく行い、変更されたレコードをマージすることに決めました。だから両方のあなたの提案に感謝! – DaveRlz

関連する問題