我在尝试解析属性表达式时遇到了 Spring Data 存储库错误:
public interface ContractRepository
extends MongoRepository<Contract,String> {
public List<Contract> findByCodeBindings(String binding);
}
以下是相关部分Contract
:
@Document(collection="CONTRACTS")
public class PersistentContract extends BaseContract {
@PersistenceConstructor
public PersistentContract(String name, Version version, Code code) {
super(name, version, code);
}
}
Code
是由 实现的接口CodeImpl
。它包含一个属性bindings
,其中有一个 getter 和 setter Code
。因此,查询的属性表达式旨在查找具有包含给定绑定的嵌套代码文档的合同。到目前为止,一切都很好。
但是,问题是IllegalArgumentException
被抛出:
java.lang.IllegalArgumentException: No property bindings found on my.company.Code!
org.springframework.data.mapping.context.AbstractMappingContext.getPersistentPropertyPath(AbstractMappingContext.java:225)
调试那段代码表明 Spring Data 正在分解表达式并确定存在 type 的属性Code
。但是,因为Code
是一个接口,所以它没有列出任何属性。
有没有办法提示Code
具有此属性或该属性CodeImpl
的实际类型的Spring Data code
?我很惊讶该库没有尝试解析接口的 getter 或 setter。
这是使用 spring-data-commons 1.5.1.RELEASE 和 spring-data-mongodb 1.2.1.RELEASE。
感谢帮助。