java - 为什么 Spring Data 的 MongoRepository 如此有限?

标签 java spring mongodb spring-data-mongodb

所以我注意到 Spring Data 的 MongoTemplate 有很多不同类型的“保存对象”操作,比如保存、更新插入、插入和更新优先。

另一方面,Spring Data 的 MongoRepository 接口(interface)有一个持久化方法:“保存”。现在,很明显,如果我想要创建/更新/更新插入功能,我可以很容易地实现它们。在你调用“保存”之前做一个获取并检查实体是否存在。但是 MongoTemplate 有如此多样的选择似乎很奇怪(我什至无法弄清楚保存和更新插入之间的区别是什么),但是 Spring Data 的 repos 非常有限。

如果您要使用创建/更新语义,您认为在不自定义其方法的情况下使用 Spring Data MongoRepositories 是浪费/懒惰,还是 get + null check + repository.save 与 mongoTemplate 之间的区别.insert 太无关紧要了?

最佳答案

您可以使用 XXXRepositoryCustom 并为其编写实现来自定义您自己的存储库。

这是一个例子:

public interface AccountRepository extends MongoRepository<Account, String>, AccountRepositoryCustom{

    @Query("{ 'email' : ?0 }")
    Account findByEmail(String email);

}

注意上面的接口(interface)扩展了你自己的 AccountRepositoryCustom 接口(interface)。

然后定义你自己的AccountRepositoryCustom:

public interface AccountRepositoryCustom {

    public boolean updateAccountToken(String id, String token);

}

接下来,为它写一个实现:

public class AccountRepositoryCustomImpl implements AccountRepositoryCustom {

    @Autowired
    private MongoTemplate mongoTemplate;

    @Override
    public boolean updateAccountToken(String id, String token) {    
            // your code 
    }
}

关于java - 为什么 Spring Data 的 MongoRepository 如此有限?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17802360/

相关文章:

java - 有没有办法导出jconsole监控结果?

java - 如何打印我的 LinkedList 中的条目?

Java - 如果

java - 将线程分组并为每个组设置不同的最大线程数

c++ - MongoDB C++ 教程程序失败 : 'mongocxx::v_noabi::logic_error'

javascript - MongoDB 中的 Promise 是什么?

javax.net.ssl.SSLHandshakeException : sun. security.validator.ValidatorException 错误

java - Spring 启动 : Change the order of the PropertySource

javascript - 通过js从spring资源包中获取消息

MongoDB:.mongorc.js 中定义的自定义命令