我正在使用spring数据为我的应用程序获取数据。
版本库类使用mongo实体类,该类作为上游依赖项添加到我的项目中,这意味着我没有任何控件可以更改类的源代码。结果,我无法从@Document
到我的mongo实体类使用org.springframework.data.mongodb.core.mapping
注释。
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
类的源代码,因此无法添加@Document
来指定此类的集合名称
在使用DummyRepository
查询mongo集合时如何指定集合名称?
答案 0 :(得分:1)
一种方法是使用@EnableMongoRepositories#repositoryFactoryBeanClass
和自己的风格MongoRepsoitoryFactoryBean
覆盖getEntityInformation(Class)
。{br />
不幸的是,代码中存在一个错误(DATAMONGO-2297),目前,您还需要自定义getTargetRepsoitory(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);
}
};
}
}