SD MongoDB的多态性子文档(SD MongoDB polymorphism in subdo

2019-07-19 22:20发布

我刚开始开发一些Java应用程序与弹簧数据的MongoDB和遇到一些问题,我一直没能解决传来:

有一对夫妇文档豆这样的:

@Document(collection="myBeanBar")
public class BarImpl implements Bar {
   String id;
   Foo foo;
   // More fields and methods ...
}

@Docuemnt
public class FooImpl implements Foo {
   String id;
   String someField;
   // some more fields and methods ...
}

而我对此简单地调用找到一个类似的方法库类:

public List<? extends Bar> findByFooField(final String fieldValue) {
    Query query = Query.query(Criteria.where("foo.someField").is(fieldValue));
    return getMongoOperations().find(query, BarImpl.class);
}

保存酒吧工作得很好,它会在蒙戈保存的“_class”属性都Foo和酒吧。 然而,在一些富找到的属性会抛出这样一个异常:

Exception in thread "main" java.lang.IllegalArgumentException: No property someField found on test.Foo!
    at org.springframework.data.mapping.context.AbstractMappingContext.getPersistentPropertyPath(AbstractMappingContext.java:225)
    at org.springframework.data.mongodb.core.convert.QueryMapper.getPath(QueryMapper.java:202)
    at org.springframework.data.mongodb.core.convert.QueryMapper.getTargetProperty(QueryMapper.java:190)
    at org.springframework.data.mongodb.core.convert.QueryMapper.getMappedObject(QueryMapper.java:86)
    at org.springframework.data.mongodb.core.MongoTemplate.doFind(MongoTemplate.java:1336)
    at org.springframework.data.mongodb.core.MongoTemplate.doFind(MongoTemplate.java:1322)
    at org.springframework.data.mongodb.core.MongoTemplate.find(MongoTemplate.java:495)
    at org.springframework.data.mongodb.core.MongoTemplate.find(MongoTemplate.java:486)

其中,一些挖后,有一定道理,因为无处查询是被指定的子文档的具体类型和酒吧的实体信息说foo的类型是美孚(不FooImpl),这反过来又不能有属性导致它是一个接口。

我的问题是:是否有办法将其指定或工作解决此问题不宣子文档类型作为具体类型?

我一直在Google上搜寻它了几天,看文档和API和源代码,但我无法找到一个明确的方式来做到这一点。 我真的很感谢你的帮助。

非常感谢你。

Answer 1:

我有一个类似的问题,我有一个实现接口的类,当我使用findAll我得到的错误:

org.springframework.data.mapping.model.MappingInstantiationException:无法实例bean类[test.MetaClasse]:指定的类是一个接口。

调试后SpringData代码,我意识到,映射器使用@TypeAlias发现它有实例的类型,所以我只是把@TypeAlias("FullClassName")在我的实现test.MetaClasse和它的工作!

我跟你的情况进行测试,它会工作!



文章来源: SD MongoDB polymorphism in subdocument