Spring Data Mongo:阻止对BeforeSaveEvent进行保存操作

时间:2017-05-06 10:50:50

标签: java spring mongodb spring-data spring-data-mongodb

这是我的问题:在将文档保存到Mongo之前,我必须进行一些低级唯一性检查。如果唯一性检查失败,我想阻止保存文档。

我决定使用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()中的重复记录
  4. 请你们给我一些如何完成这项任务的建议?

1 个答案:

答案 0 :(得分:0)

  

阻止catch块中的保存操作(如果可能)

是。您可以通过从监听器中抛出异常来阻止。它会起作用。

参考其他人:

我假设您有2个不同的 @Documents ,在保存 @Document用户之前,您要检查是否可以保存 @Document UserEmail

你可以:

  • 像你一样抓住异常并抛出不同的一个,
  • 或者只是避开阻塞。

在两种情况下结果都是一样的。 UserEmail和User @Documents都不会被保存,并且会传播异常。