J'utilise les référentiels et entités JPA Spring dans une application. Maintenant, dans un aperçu de cette application, j'ai besoin d'étendre une de mes entités et de fournir également un référentiel étendu.@ Équivalent principal pour les référentiels JPA Spring auto-gérés
Pour tous les autres haricots que je dois remplacer/Prolonger je crée simplement une nouvelle implémentation et annoter avec @Primary il sera autowired au lieu de la mise en œuvre par défaut.
Pour les dépôts, cela ne fonctionne pas cependant. Je peux annoter le nouveau dépôt avec @Primary mais cela n'a aucun effet (les deux beans sont trouvés et ne peuvent donc pas être auto-gérés). Cela est logique car le référentiel est une interface et non une implémentation, l'implémentation est fournie dynamiquement par Spring.
Puis-je dire en quelque sorte printemps (via l'annotation sur le référentiel ou via la configuration) qui référentiel à utiliser? Ou dois-je faire une solution de contournement manuelle comme ceci Using @Primary in Spring Data JPA repositories ou devrais-je proposer une sorte de fournisseur de référentiel au lieu de autowiring?
Modifier pour rendre les choses plus claires: Disons que j'ai une entité A
@Entity
public class A {
@Id
private long id;
}
et son dépôt
public ARepository extends Repository<A, Long> {
}
Maintenant, je l'étendre à l'entité B
@Entity
public class B extends A {
}
public interface BRepository extends ARepository {
}
Normalement, selon la documentation, vous utilisez des référentiels comme ceci:
@Autowired
private ARepository repository;
Cela ne cependant fonctionne pas car il y a maintenant deux haricots de type ARepository
. Pour les haricots que j'implémente moi-même j'utiliserais @Primary
sur la classe d'extension mais pour les dépôts il n'y a pas d'implémentation de l'interface au moment de la compilation.
Pourquoi l'extension d'entités et de référentiels pour cette entité nécessite-t-elle ce que vous décrivez dans votre second paragraphe. ... Peut-être que le paragraphe 2. devrait être reformulé - je (et cela ne semble être personne d'autre) comprendre ce que vous voulez faire/quel est votre problème. – Ralph
@Ralph J'ai ajouté un exemple de code pour expliquer mon problème.Il y a aussi la question liée où j'essaie d'utiliser une usine de dépôt à la place de l'autowiring normal. –
Maintenant je l'ai eu. - question interessante. – Ralph