Je travaille sur une application Spring Boot v1.4.2.RELEASE avec JPA.
J'ai défini les interfaces et les implémentations du référentiel
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);
}
}
Et un service AServiceImpl
@Service
public class AServiceImpl implements AService {
private ARepository aRepository;
public AServiceImpl(ARepository aRepository) {
super();
this.aRepository = aRepository;
}
...
}
Mon application ne commence pas par le message:
*************************** APPLICATION ÉCHOUÉE DE COMMENCER ********** ***************** Description: Les dépendances de certains des haricots dans le contexte de l'application forment un cycle: | aRepositoryImpl └─────┘
J'ai suivi toutes les étapes décrites dans http://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repositories.single-repository-behaviour
S'il vous plaît aider!
Laurent
Il existe une solution simple à votre problème initial: Supprimez simplement @Repository d'ARepositoryCustom et d'ARepositoryImpl . Conservez toutes les hiérarchies de dénomination et d'interface/classe. Ils vont tous bien.
J'ai testé votre code source et trouvé quelque chose de compliqué.
Tout d'abord, avec votre code source, j'ai eu l'erreur suivante:
There is a circular dependency between 1 beans in the application context:
- ARepositoryImpl (field private test.ARepository test.ARepositoryImpl.aRepository)
- aRepositoryImpl
Ensuite, je suppose que Spring 'a confondu' entre ARepository
(référentiel JPA) et ARepositoryImpl
(référentiel personnalisé). Donc, je vous suggérerais renommerARepository
en quelque chose d'autre, tel que BRepository
. Cela a fonctionné si j'ai renommé le nom de la classe.
Selon la documentation officielle de Spring Data ( https://docs.spring.io/spring-data/jpa/docs/current/reference/html/ ):
Ces classes doivent respecter la convention de dénomination qui consiste à ajouter l’attribut repository-impl-postfix de l’élément namespace au nom de l’interface de référentiel trouvée. _ {Ce suffixe par défaut: Impl}