Dav*_*ave 8 java spring mongodb spring-data spring-data-mongodb
我有一个像这样注释的pojo:
@Document
class Car {
@Id
String id ;
@Indexed
String manufacturer ;
}
Run Code Online (Sandbox Code Playgroud)
我正在使用MongoTemplate插入mongo.如果我插入而没有指定集合名称,一切正常.但是,如果我指定了集合名称,则除了_id一个索引之外,不会创建任何索引.
我真的需要能够手动指定集合名称,因为:
Car最终在同一个集合中Cars在一个单独的收藏中我必须ensureIndex()手动给自己打电话吗?如果是这样,有没有办法使用我的@Indexed注释?我试图保存的实际对象比"Car"要复杂得多
不幸MongoTemplate功能
public void insert(Object objectToSave, String collectionName)
Run Code Online (Sandbox Code Playgroud)
使用collectionName仅保存对象,而不是创建任何注释索引.如果对象传递给保存操作,则应用程序事件侦听器MongoPersistentEntityIndexCreator扫描保存的实体类以进行@Indexed注释并创建索引.但它根据下一个公式(来自源)检测集合名称:
String collection = StringUtils.hasText(index.collection()) ? index.collection() : entity.getCollection();
Run Code Online (Sandbox Code Playgroud)
这里index.collection()是收集@Indexed标注和entity.getCollection()从@Document注释.
所以,你需要ensureIndex()手动调用.这是奇怪的行为.我想你可以在这里打开bug:DATAMONGO
编辑:
我认为你可以创建函数,返回所有注释的类,@Document并从mongodb开始获取所有集合cars.<year>.然后,您可以分析所有注释的字段,@Indexed并因此ensureIndex使用集合列表调用此字段.
| 归档时间: |
|
| 查看次数: |
2264 次 |
| 最近记录: |