有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何使reactiveCrudepository@Tailable中的方法

我正在学习一些教程,介绍如何在MongoDB中为capped集合编写可裁剪的游标查询。我发现我可以通过@Tailable实现这一点。例如,如下所示:

public interface ReactiveProductRepository extends ReactiveCrudRepository<Product, String>{

  @Tailable
  Flux<Product> findByName(String name);
}

这很有魅力。这也适用于@Query注释(在复杂查询的情况下)

但是如果我想使ReactiveCrudRepository中的一个方法成为可裁剪的呢?例如,findAll。我能找到的唯一替代方法是在我的存储库中添加如下方法:

  @Tailable
  @Query("{}")
  Flux<Product> findAllProducts();

那只不过是芬德尔。我想知道:是否应该为内置方法指定@Tailable特性

有什么想法吗?有一个类似于PagingAndSortingRepository的新接口(TailableRepository)有意义吗


共 (2) 个答案

  1. # 1 楼答案

    由实际实现支持的存储库方法的行为不能改变,也不能被查询方法覆盖

    您可以声明不带参数的查询方法,并为要用作入口点的所需方法提供default实现:

    public interface LoginEventRepository extends ReactiveCrudRepository<LoginEvent, String> {
    
        @Tailable
        Flux<LoginEvent> findPeopleBy();
    
        @Override
        default Flux<LoginEvent> findAll(){
            return findPeopleBy();
        }
    }
    

    另请参见here,以获取@Tailable无参数查询方法的示例

  2. # 2 楼答案

    您可以使用findWithTailableCursorBy无需查询即可检索所有记录

    @Tailable
    Flux<Product> findWithTailableCursorBy();