我遇到了同样的问题.
看看源代码,令我惊讶的是它有点没有实现.它添加了Collection名称和实体类,但未在最终查询中插入_class属性.
在看了之后我意识到Mongo将如何知道从SuperClass派生的SubClass1或Subclass2.
所以我只是覆盖SimpleMongoRepository类并创建我自己的Factory,它放置该类而不是默认的SimpleMongoRepository
我在这里添加了:
public MySimpleMongoRepository(MongoEntityInformation metadata, MongoOperations mongoOperations) {
Assert.notNull(mongoOperations);
Assert.notNull(metadata);
this.entityInformation = metadata;
this.mongoOperations = mongoOperations;
Reflections reflections = new Reflections("com.cre8techlabs.entity");
Set subTypes = reflections.getSubTypesOf(entityInformation.getJavaType()).stream().map(Class::getName).collect(Collectors.toSet());
subTypes.add(entityInformation.getJavaType().getName());
this.baseClassQuery = Criteria.where("_class").in(subTypes.toArray());
}
这里是一个实现find的例子
public T findOne(ID id) {
Assert.notNull(id, "The given id must not be null!");
Query q = getIdQuery(id).addCriteria(baseClassQuery);
return mongoOperations.findOne(q, entityInformation.getJavaType(), entityInformation.getCollectionName());
}
它适用于我,我只是担心需要更长的时间