2017-05-06 43 views
0

這是我的問題:我必須在將文檔保存到Mongo中之前進行一些低級別唯一性檢查。如果唯一性檢查失敗,我想防止保存文檔。Spring Data 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 
     } 

    } 
} 

,但我在與執行保存操作處理的防止的麻煩。

我可以看到3種可能性來完成我的任務:

  1. 塊catch塊保存操作(如果可能的話)
  2. 招的try/catch上級
  3. 捕獲異常在這個監聽器中,然後刪除AbstractMongoEventListener.onAfterSave()中的重複記錄()

請問你們給我一些建議如何完成這個任務?

+0

你已經有三種選擇?你爲什麼想要更多? –

+0

我不知道如果第一個可能,第二個是不可能的 – nibsa

回答

0

塊catch塊(如果可能的話)的保存操作

是。您可以通過從Listener中拋出異常來阻止。它會工作。

參考別人:

我假設你有2個不同的@Documents,並要檢查,如果你可以節省@Document USEREMAIL保存@Document用戶之前。

您可以:

  • 捕獲異常爲你做,並拋出一個不同,
  • 或只是避免catch塊。

在這兩種情況下結果都是一樣的。 UserEmail和User @Documents都未保存,並且異常被傳播。

相關問題