Bonjour à toutes et a tous,
Je suis face à un probleme que je n'arrive pas a resoudre.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 public interface Service<T> { Iterable<T> findAll(); T find(Long id); T find(String id); void delete(Long id); T createOrUpdate(T object); }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 import org.springframework.data.repository.CrudRepository; import model.domain.BDESSecuPk; public abstract class GenericService<T> implements Service<T> { public abstract CrudRepository<T, Long> getRepository(); public abstract CrudRepository<T, BDESSecuPk> getRep(); @Override public Iterable<T> findAll() { return getRepository().findAll(); } @Override public T find(Long id) { return getRepository().findOne(id); } @Override public void delete(Long id) { getRepository().delete(id); } @Override public T createOrUpdate(T entity) { T saved = getRepository().save(entity); return saved; } }Je voudrai eviter de creer des methodes qui renvoient le type de chaque entite: je m'explique, j'ai plusieurs classes avec des clés composite, et donc quand je crée un class repository je passe la cle composé en parametre pour la classe crudRepository de spring.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.repository.CrudRepository; import org.springframework.stereotype.Service; import onet.application.dsi.dwrh.model.domain.BDESSecu; import model.domain.BDESSecuPk; import repository.BDESSecuRepository; import service.generic.GenericService; @Service public class BDESSecuService extends GenericService<BDESSecu> { @Autowired private BDESSecuRepository repository; @Override public CrudRepository<BDESSecu, Long> getRepository() { return null; } public BDESSecu findByPrimaryKey(BDESSecuPk id){ return repository.findById(id); } @Override public BDESSecu find(String id) { return null; } @Override public CrudRepository<BDESSecu, BDESSecuPk> getRep() { return repository; } }
J'aimerai utiliser un moyen elegant pour eviter de dupliquer le code (surtout dans la partie service de l'application)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 import org.springframework.data.jpa.repository.JpaRepository; import domain.AxeGeneriqueCodeLibelle; import domain.AxeGeneriqueCodeLibellePk; public interface AxeGeneriqueCodeLibelleRepository extends JpaRepository<AxeGeneriqueCodeLibelle, AxeGeneriqueCodeLibellePk> { }
si vous voyez la methode de cette classe
J'etais obliger de remonter dans la classe GenerciService une methode en plus (getRep()) alors qu'à la base il y'avait juste cette methode getRepository().
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 @Override public CrudRepository<BDESSecu, Long> getRepository() { return null; } @Override public CrudRepository<BDESSecu, BDESSecuPk> getRep() { return repository; }
ça ne marche pas parce que le type de cle primaire(cle composé change d'une classe à une autre)
J'ai pris l'exemple de ces deux methodes que j'ai dupliqué et ça ne s'arrete pas là.
je dois a vrai dire faire autant de methode que type different (c'est a dire n fois getRepository et n fois le update et n fois le delete et n fois le find etc)
Cordialement et merci
Partager