JPAでSpring Boot v1.4.2.RELEASEアプリケーションに取り組んでいます。
リポジトリのインターフェイスと実装を定義しました
ARepository
@Repository
public interface ARepository extends CrudRepository<A, String>, ARepositoryCustom, JpaSpecificationExecutor<A> {
}
ARepositoryCustom
@Repository
public interface ARepositoryCustom {
Page<A> findA(findAForm form, Pageable pageable);
}
ARepositoryImpl
@Repository
public class ARepositoryImpl implements ARepositoryCustom {
@Autowired
private ARepository aRepository;
@Override
public Page<A> findA(findAForm form, Pageable pageable) {
return aRepository.findAll(
where(ASpecs.codeLike(form.getCode()))
.and(ASpecs.labelLike(form.getLabel()))
.and(ASpecs.isActive()),
pageable);
}
}
そして、サービスAServiceImpl
@Service
public class AServiceImpl implements AService {
private ARepository aRepository;
public AServiceImpl(ARepository aRepository) {
super();
this.aRepository = aRepository;
}
...
}
私のアプリケーションはメッセージで始まりません:
*************************** アプリケーションの開始に失敗しました **** *********************** 説明: いくつかの依存関係アプリケーションコンテキストのBeanはサイクルを形成します: | aRepositoryImpl └─────┘
http://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repositories.single-repository-behaviour に記載されているすべての手順に従いました
助けてください !
ローラン
元の問題に対する簡単な修正があります:ARepositoryCustomおよびARepositoryImplから@Repositoryを削除するだけです。すべての命名およびインターフェース/クラス階層を保持します。すべて大丈夫です。
私はあなたのソースコードをテストしましたが、トリッキーな何かを見つけました。
まず、ソースコードで、次のエラーが表示されました。
There is a circular dependency between 1 beans in the application context:
- ARepositoryImpl (field private test.ARepository test.ARepositoryImpl.aRepository)
- aRepositoryImpl
次に、SpringはARepository
(JPAリポジトリ)とARepositoryImpl
(カスタムリポジトリ)の間で「混乱」していると思います。したがって、renameARepository
をBRepository
などの別のものに変更することをお勧めします。クラス名を変更するとうまくいきました。
Spring Dataの公式ドキュメントによると( https://docs.spring.io/spring-data/jpa/docs/current/reference/html/ ):
これらのクラスは、名前空間要素の属性repository-impl-postfixを、見つかったリポジトリインターフェイス名に追加するという命名規則に従う必要があります。 この接尾辞のデフォルトはImpl