【发布时间】:2021-08-04 11:00:44
【问题描述】:
我需要对给定的 mongo 数据库执行方法查询并检索数据。但为此,我必须检查字段 delete=false(Soft delete) 是否用于所有查询。
可以通过如下查询来实现
例如:Optional<User> findByIdAndDeletedIsFalse(String id);
但正如您所见,我们必须为所有查询输入DeletedIsFalse。
我尝试了How to add default criteria to all the queries by default in mongo spring boot 中提供的答案,但我发现它只能在我们直接使用 mongo 模板运行查询时使用。
经过一些调试,我发现即使方法查询是通过 Mogno 模板执行的,它们也是使用包保护的类和方法来执行的。所以它们不能被继承的类覆盖。 我找不到让他们执行的入口点以及为方法查询注入默认条件的位置。
例如:如果我们检查MongoTemple 的实现,最后执行是通过一个方法发生的
<S, T> List<T> doFind(String collectionName, Document query, Document fields, Class<S> sourceClass, Class<T> targetClass, CursorPreparer preparer)
并且该方法是从名为ExecutableFindOperationSupport 的内部类调用的。所有这些类都是包保护的。
是否有任何理由让它们受到包保护而不给从继承类覆盖它们的机会? 还有没有其他方法可以使用默认条件运行方法查询而不将它们附加到所有查询?
【问题讨论】:
标签: java spring mongodb spring-boot mongodb-query