当前位置: 首页 > 知识库问答 >
问题:

如何在使用spring data mongo repository时指定集合名称?

邬阳
2023-03-14

我正在使用Spring数据为我的应用程序获取数据。

repository类使用mongo实体类,该实体类作为上游依赖项添加到我的项目中,这意味着我无法控制更改该类的源代码。因此,我无法使用组织中的文档注释。springframework。数据mongodb。果心映射到我的mongo实体类。

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.mongodb.repository.MongoRepository;

public interface DummyRepository extends MongoRepository<Dummy, String> {

    Page<Dummy> findAll(Pageable pageable);

}

在这里,我对Dummy类的源代码没有任何控制权,因此我无法添加文档来指定该类的集合名称

如何在使用DummyRepository查询mongo集合时指定集合名称?

共有1个答案

鲜于光辉
2023-03-14

一种方法是使用您自己风格的MongoRepsoitoryFactoryBean来覆盖getEntityInformation(Class)
不幸的是,代码中有一个bug(DATAMONGO-2297),目前您还需要自定义GetTargetRepository(RepositoryInformation),如下面的代码片段所示。

@Configuration
@EnableMongoRepositories(repositoryFactoryBeanClass = CustomRepoFactory.class)
class config extends AbstractMongoConfiguration {
  // ...
}

class CustomRepoFactory extends MongoRepositoryFactoryBean {

  public CustomRepoFactory(Class repositoryInterface) {
    super(repositoryInterface);
  }

  @Override
  protected RepositoryFactorySupport getFactoryInstance(MongoOperations operations) {

    return new MongoRepositoryFactory(operations) {

      @Override
      public <T, ID> MongoEntityInformation<T, ID> getEntityInformation(Class<T> domainClass) {

       return new MappingMongoEntityInformation(
            operations.getConverter().getMappingContext().getPersistentEntity(domainClass)) {

          @Override
          public String getCollectionName() {
            return "customize-as-you-wish";
          }
        };
      }

      @Override // you should not need this when DATAMONGO-2297 is resolved
      protected Object getTargetRepository(RepositoryInformation information) {

        MongoEntityInformation<?, Serializable> entityInformation = getEntityInformation(information.getDomainType());
        return getTargetRepositoryViaReflection(information, entityInformation, operations);
      }
    };
  }
}
 类似资料:
  • 问题内容: 除了a 和Java 可以两次包含相同的元素外,a 和Java 之间在实践上还有什么区别吗?它们具有相同的方法。 (例如,是否给我更多选择来使用接受s但不接受s的库?) 编辑: 我可以认为至少有5种不同的情况来判断这个问题。其他人还能提出更多建议吗?我想确保我了解这里的微妙之处。 设计接受或参数的方法。更通用,并接受更多输入可能性。(如果我正在设计特定的类或接口,那么对我的消费者会更好,

  • 我写了一个应用程序,使用Spring MongoRepository连接到产品销售的集合,其中包含所有产品的销售数据。 现在,我面临一个问题,因为我现在有多个产品销售集合,而不是一个集合,每个集合包含一个产品。所有集合的结构仍然相同,但现在每个集合的名称类似于“Sales_123”、“Sales_456”,其中数字后缀是产品Id。 这意味着我不能再使用文档注释来指定集合名称。我仍然可以在运行时将集

  • 我正在使用OpenAPI/Swagger来指定我的API。 有一件事我找不到,那就是如何指定一个集合。 我正在使用https://editor.swagger.io/我输入了整个API。对于要指定为集的属性,我编写了以下代码: 我本以为uniqueItems会起作用并生成一个Set,但事实并非如此。相反,生成了以下代码: 有没有办法生成类似 而是? 我在SO中找到了一个可能的解决方案,但这需要在p

  • https://github.com/milvus-io/pymilvus/blob/master/pymilvus/orm/collection.py 在 pymilvus 中,只看到设置 shards_num, 没有看到设置副本数的地方?

  • 我使用Spring Boot和Spring Data MongoDB与底层分片MongoDB集群进行接口。我的Spring Boot应用程序通过路由器访问集群。 使用Spring Data MongoDB,可以通过指定对象持久化到的集合,或者默认为类名(第一个字母小写)。这些藏品不需要预先存在;它们可以在运行时创建。 要在MongoDB中分片集合,您需要 1-在数据库上启用分片: 2-在分片数据库

  • 如何获取status为0的那个集合也就是获取{ "id": 1, "name": "Alice",age:[ {id:4,status:0} ] },这个集合 获取status为1的就是获取另外两个集合