2017-04-23 89 views
0

我正在爲variables表編寫存儲庫,並希望使用它訪問特定的行。對於這個我想自動裝配主倉庫到定製的實現,像這樣:如何在Spring Data JPA中從cusom存儲庫訪問主存儲庫?

public interface VariableRepo extends CrudRepository<Variable, Long>, VariableRepoCustom { 
    Variable getByName(String name); 
} 

public interface VariableRepoCustom { 
... 
    Variable getPopulationSingle(); 
... 
} 

public class VariableRepoCustomImpl implements VariableRepoCustom { 

    private final VariableRepo variableRepo; 

    @Autowired 
    public VariableRepoCustomImpl(VariableRepo variableRepo) { 
     this.variableRepo = variableRepo; 
    } 

    @Override 
    public Variable getPopulationSingle() { 
     return getByName("Population single"); 
    } 
... 
} 

不幸的是,春天喜歡去瘋狂與此,拋出一個異常:

錯誤與名製作豆「variableRepo ':調用init 方法失敗;嵌套異常是 org.springframework.data.mapping.PropertyReferenceException:否 property getPopulationSingle for type Variable!

I.e.它試圖在實體類(Variable)內找到當然不應該包含在裏面的存儲庫方法。

如何解決這個問題?

+2

您需要爲您的自定義回購命名爲impl'VariableRepoImpl' – mp911de

回答

0

你所說的VariableRepoCustom/VariableRepoCustomImpl實際上應該是一個服務(而不是根據spring-data-jpa的存儲庫)。

接口VariableRepoCustom不應該出現在JPA搜索路徑,以防止JPA生成實現

+0

將自定義...移動到另一個包沒有幫助。 – Dims

+0

你的JPA搜索路徑是什麼?如果將接口移出JPA搜索路徑,JPA無法嘗試生成實現 –

+0

在應用上下文中應該有這樣的行:

0

我覺得可能是你的資料庫IMPL沒有@Repository註解。請將repository和impl作爲@Repository。它應該解決你的問題。

對於最佳實踐,無需自動將VariableRepo接口轉換爲impl類。

編輯: 也從impl中刪除自定義。名稱將通過append impl爲RepoName。它的定義像VariableRepoImpl

+0

我沒有看到這是必需的:http://docs.spring.io/spring-data/jpa/docs/2.0.x/reference/html/#repositories .definition – Dims

+0

我看到了,不需要自動裝入repo into impl類 – iMBMT

+0

如何訪問它呢? – Dims

相關問題