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;
    }
 
}
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;
	}
 
}
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
 
import org.springframework.data.jpa.repository.JpaRepository;
 
import domain.AxeGeneriqueCodeLibelle;
import domain.AxeGeneriqueCodeLibellePk;
 
public interface AxeGeneriqueCodeLibelleRepository extends JpaRepository<AxeGeneriqueCodeLibelle, AxeGeneriqueCodeLibellePk> {
 
}
J'aimerai utiliser un moyen elegant pour eviter de dupliquer le code (surtout dans la partie service de l'application)
si vous voyez la methode de cette classe
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;
	}
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().
ç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