J’utilise CrudRepository
de spring-data-jpa pour définir simplement l’interface d’une entité, puis utiliser toutes les méthodes standard crud sans avoir à fournir explicitement une implémentation, par exemple:
public interface UserRepo extends CrudRepository { }
Bien que maintenant je veuille remplacer uniquement la méthode save()
dans mon implémentation personnalisée. Comment pourrais-je y parvenir? En effet, si UserRepo
l’interface UserRepo
, je devrais implémenter toutes les autres méthodes CRUD héritées de l’interface CrudRepository
.
Est-ce que je ne peux pas écrire ma propre implémentation qui a toutes les méthodes CRUD mais en redéfinissant une sans avoir à implémenter toutes les autres moi-même?
Vous pouvez faire quelque chose d’ assez similaire , ce qui, je pense, permettra d’ obtenir le résultat que vous recherchez.
ÉTAPES NÉCESSAIRES:
1) UserRepo
étendra maintenant 2 interfaces:
public interface UserRepo extends CrudRepository, UserCustomMethods{ }
2) Créez une nouvelle interface nommée UserCustomMethods
(vous pouvez choisir le nom et changer à la fois ici et à l’étape 1)
public interface UserCustomMethods{ public void mySave(User... users); }
3) créez une nouvelle classe nommée UserRepoImpl
(ici le nom compte et il devrait s’agir de RepositoryName Impl , car si vous l’appelez autrement, vous devrez ajuster la configuration Java / XML en conséquence). cette classe ne doit implémenter que l’interface CUSTOM que vous avez créée.
CONSEIL: vous pouvez injecter entitymanager dans cette classe pour vos requêtes.
public class UserRepoImpl implements UserCustomMethods{ //This is my tip, but not a must... @PersistenceContext private EntityManager em; public void mySave(User... users){ //do what you need here } }
4) Injectez UserRepo
partout où vous en avez besoin et profitez à la fois de CRUD et de vos méthodes personnalisées 🙂