Java 使用Spring数据和MongoDB解析子文档类型
Spring数据存储库试图解析属性表达式时遇到错误: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。因
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> {
}