2017-04-23 8 views
0

私はvariablesテーブルのリポジトリを作成しており、そのテーブルに特定の行にアクセスしたいと考えています。このために、私はこのように、カスタム実装にメインリポジトリをautowireしようとしています: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を持つBeanを作成

エラー':init メソッドの呼び出しに失敗しました。ネストされた例外は org.springframework.data.mapping.PropertyReferenceException:いいえ プロパティgetPopulationSingleがタイプ変数に見つかりました!

e.e.e.内部に含まれてはいけないエンティティクラス(Variable)内部のリポジトリメソッドを見つけようとします。

これを解決するにはどうすればよいですか?

+2

カスタムリポジトリの名前を「VariableRepoImpl」 – mp911de

答えて

0

VariableRepoCustom/VariableRepoCustomImplという名前のサービスは、実際にはサービスでなければなりません(spring-data-jpaに関してはリポジトリではありません)。

インタフェースVariableRepoCustomは、私はあなたのリポジトリIMPLが@Repository注釈を持っていないかもしれないと思うの実装

+0

にする必要があります。カスタムを別のパッケージに移動することは役に立ちませんでした。 – Dims

+0

JPA検索パスとは何ですか?インタフェースがJPA検索パスから移動された場合、JPAは実装を生成しようとすることはできません –

+0

あなたのアプリコンテキストには次のような行があります:<リポジトリベースパッケージ= "com.acme.repositories" /> –

0

を生成するためにJPAを防ぐために、JPAののsearchpathに存在してはなりません。リポジトリとインプラントの両方を@Repositoryとして作成してください。あなたの問題を解決するはずです。

ベストプラクティスのために、implクラスにVariableRepoインターフェイスをautowireする必要はありません。

編集: また、カスタムからカスタムを削除します。名前はRepoNameにappend implで指定します。 VariableRepoImplのように定義されています

+0

これは必須ではありません。http://docs.spring.io/spring-data/jpa/docs/2.0.x/reference/html/#repositories .definition – Dims

+0

私はRepoをインプルクラスにオートワイヤリングする必要はありません – iMBMT

+0

どのようにそれにアクセスするのですか? – Dims

関連する問題