Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Spring数据和MongoDB解析子文档类型_Java_Mongodb_Spring Data_Spring Data Mongodb - Fatal编程技术网

Java 使用Spring数据和MongoDB解析子文档类型

Java 使用Spring数据和MongoDB解析子文档类型,java,mongodb,spring-data,spring-data-mongodb,Java,Mongodb,Spring Data,Spring Data Mongodb,Spring数据存储库试图解析属性表达式时遇到错误: public interface ContractRepository extends MongoRepository<Contract,String> { public List<Contract> findByCodeBindings(String binding); } code是由codeinpl实现的接口。它包含一个属性bindings,该属性在code中有一个getter和setter。因

Spring数据存储库试图解析属性表达式时遇到错误:

public interface ContractRepository
    extends MongoRepository<Contract,String> {
    public List<Contract> findByCodeBindings(String binding);
}
code
是由
codeinpl
实现的接口。它包含一个属性
bindings
,该属性在
code
中有一个getter和setter。因此,查询的属性表达式设计用于查找包含给定绑定的嵌套代码文档的契约。到目前为止,一切顺利

但是,问题是抛出了一个
非法argumentException

java.lang.IllegalArgumentException: No property bindings found on my.company.Code!
 org.springframework.data.mapping.context.AbstractMappingContext.getPersistentPropertyPath(AbstractMappingContext.java:225)
调试这段代码表明Spring数据正在分离表达式,并确定存在类型为
code
的属性。但是,由于
code
是一个接口,因此没有列出属性

是否有方法向Spring数据提示
code
具有此属性,或者
codeinpl
code
属性的实际类型?我很惊讶库没有尝试解析接口的getter或setter

这是使用SpringDataCommons1.5.1.RELEASE和SpringDataMongoDB1.2.1.RELEASE


谢谢你的帮助

我的解决方案是在持久对象中完全避免接口。因此,
BaseContract
成为以下内容:

public abstract class BaseContract<T extends Code> {
    public abstract T getCode();
}
这似乎在编码基类中的接口和满足Spring数据对具体类的需求之间取得了正确的平衡

public abstract class BaseContract<T extends Code> {
    public abstract T getCode();
}
public class PersistentContract extends BaseContract<CodeImpl> {
}