2017-05-06 12 views
0

私の問題は次のとおりです。文書をMongoに保存する前に、低レベルの一意性検査を行う必要があります。一意性検査が失敗した場合、文書の保存を防ぎたい。春データMongo:BeforeSaveEventでの保存操作を防止する

私はAbstractMongoEventListener.onBeforeSave()を利用することに決めました。

私は次のようなものを考えていた:

class MyEventListener extends AbstractMongoEventListener<User> { 

    @Autowired 
    UserEmailRepository userEmailRepository; 

    @Override 
    public void onBeforeSave(BeforeSaveEvent<User> event) { 
     User user = event.getSource(); 
     try { 
      UserEmail userEmail = new UserEmail(user.getEmail()); 
      userEmailRepository.insert(userEmail); 
     } catch (DuplicateKeyException ex) { 
      //prevent from saving User document 
     } 

    } 
} 

が、私は処理するために、保存操作の防止の実装に問題を抱えています。

  1. ブロックcatchブロックでの保存操作(それだ場合に可能)、より高いレベル
  2. キャッチ例外へ
  3. 移動のtry/catch:

    私は自分のタスクを達成するために3つの可能性を見ることができますこのリスナーでは、その後、AbstractMongoEventListener.onAfterSave()内の重複したレコードを削除してください。

このタスクを実行する方法を教えてください。

+0

すでに3つのオプションがありますか?なぜもっと欲しいの? –

+0

最初は可能かどうかわかりませんが、次の2つは最初のものが不可能な場合です – nibsa

答えて

0

ブロックcatchブロックでの保存操作(それが可能だ場合)

はい。リスナーから例外をスローすることでブロックすることができます。それは働くでしょう。

他人を参照:

私はあなたが2つの異なる@Documentsを持っており、@Documentユーザーを保存する前に、あなたが@Document USEREMAILを保存することができますかどうかを確認することを前提としています。

することはでき:

  • キャッチ例外あなたがやったと別のものを投げるよう、
  • か、単にcatchブロックを避けます。

どちらの場合も結果は同じです。 UserEmailもUser @Documentsも保存されず、例外が伝播されます。

関連する問題