簡體   English   中英

使用Spring Data和MongoDB解析子文檔類型

[英]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);
    }
}

CodeCodeImpl實現的接口。 它包含一個屬性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有這個屬性,還是CodeImplcode屬性的實際類型? 我很驚訝該庫不會嘗試解析接口的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM