我有一个实体人,由音乐家和政治家继承,还有一个存储库PersonRepository。
我正在尝试使用PersonRepository.save(..)默认方法将所有三个实体保存到MongoDB中的集合“person”中,但不知何故,Spring-Data-MongoDB将其保存为3个单独的集合“person”,“音乐家“和”政治家“。
Java代码:
@Document
public class Person {
@Id private String id;
@Indexed private String name;
@TextIndexed private String biography;
}
@Document
public Musician extends Person {
private String something;
}
@Document
public Politician extends Person {
private String somethingElse;
}
@Repository
public interface PersonRepository extends CrudRepository<User, String> {
}
在阅读了一些帖子后,我必须将集合名称设置为注释@Document(collection =“person”),以便存储库的所有三个实体将其保存到同一个集合中。
它运行良好但是当我检查MongoDB中的索引时,不知怎的,我得到的TextIndex是在保存的最后一个实体类之后命名的。
似乎TextIndex将始终以保存的实体类名称命名,而不是我在文档注释中设置的集合名称。
MongoDB Shell:
db.person.getIndexes()
[
{
"v" : 1,
"key" : {
"_id" : 1
},
"name" : "_id_",
"ns" : "test.person"
},
{
"v" : 1,
"key" : {
"_fts" : "text",
"_ftsx" : 1
},
"name" : "Musician_TextIndex",
"ns" : "test.person",
"weights" : {
"description" : 1,
"name" : 10
},
"default_language" : "english",
"language_override" : "language",
"textIndexVersion" : 3
}
]
有没有什么方法可以设置TextIndex名称,而不是在我保存的实体类之后命名它。试图搜索可以找到任何。
答案 0 :(得分:0)
目前无法使用基于注释的设置为TextIndex
设置索引名称。为此,请通过IndexOperations
使用template
手动设置文字索引。
template.indexOps(Person.class)
.ensureIndex(
new TextIndexDefinitionBuilder()
.named("YourIndexNameHere")
.onField("biography")
.build());