[英]Resolving subdocument types with Spring Data and MongoDB
我在嘗試解析屬性表達式時遇到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
,它在Code
有一個getter和setter。 因此,查詢的屬性表達式旨在使用包含給定綁定的嵌套代碼文檔來查找這些契約。 到現在為止還挺好。
但是,問題是拋出了IllegalArgumentException
:
java.lang.IllegalArgumentException: No property bindings found on my.company.Code!
org.springframework.data.mapping.context.AbstractMappingContext.getPersistentPropertyPath(AbstractMappingContext.java:225)
調試該部分代碼顯示Spring Data正在分離表達式並確定存在Code
類型的屬性。 但是,由於Code
是一個接口,因此沒有列出任何屬性。
有沒有辦法提示Spring Data, Code
有這個屬性,還是CodeImpl
是code
屬性的實際類型? 我很驚訝該庫不會嘗試解析接口的getter或setter。
這是使用spring-data-commons 1.5.1.RELEASE和spring-data-mongodb 1.2.1.RELEASE。
感謝幫助。
我的解決方案是避免持久對象中的接口。 所以BaseContract
成為以下內容:
public abstract class BaseContract<T extends Code> {
public abstract T getCode();
}
PersistentContract
是根據具體類實現的:
public class PersistentContract extends BaseContract<CodeImpl> {
}
這似乎在編寫基類中的接口和滿足Spring Data對具體類的需求之間取得了適當的平衡。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.