您的位置:首页 > 数据库 > Mongodb

mongoDB之@Document(collection = "#{personRepository.getCollectionName()}")

2018-03-30 10:40 302 查看
using answer from Oliver Gierke above, working on a project where I need to create multiple collections for one entity, I wanted to use the spring repositories and needed to specify the entity to use before using the repository.I managed to modify the repository collection name on demand using this system, it using SPeL. You can only work on 1 collection at a time though.Domain object
@Document(collection = "#{personRepository.getCollectionName()}")
public class Person{}
Default Spring Repository:
public interface PersonRepository
extends MongoRepository<Person, String>, PersonRepositoryCustom{
}
Custom Repository Interface:
public interface PersonRepositoryCustom {
String getCollectionName();

void setCollectionName(String collectionName);
}
implementation:
public class PersonRepositoryImpl implements PersonRepositoryCustom {

private static String collectionName = "Person";

@Override
public String getCollectionName() {
return collectionName;
}

@Override
public void setCollectionName(String collectionName) {
this.collectionName = collectionName;
}
}
To use it:
@Autowired
PersonRepository personRepository;

public void testRetrievePeopleFrom2SeparateCollectionsWithSpringRepo(){
List<Person> people = new ArrayList<>();
personRepository.setCollectionName("collectionA");
people.addAll(personRepository.findAll());
personDocumentRepository.setCollectionName("collectionB");
people.addAll(personRepository.findAll());
Assert.assertEquals(4, people.size());
}
Otherwise if you need to use configuration variables, you could maybe use something like this? source@Value("#{systemProperties['pop3.port'] ?: 25}")
------------------------------------------------------------------------------------------------------------------------------------
In my @Configuration class:
@Value("${mongo.event.collection}")
private String
mongoEventCollectionName;

@Bean
public String mongoEventCollectionName() {
return
mongoEventCollectionName;
}
On my Document:
@Document(collection = "#{mongoEventCollectionName}")
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐