Bonjour,

J'ai une classe de service Spring qui utilise des repositories développés à l'aide de SpringData JPA (implémentation Hibernate).
Voici un bout de code de ma classe de service :
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
 
@Service
public class TourneeServiceImpl implements TourneeService {
 
    @Autowired
    private TourneeRepository tourneeRepository;
    ...
 
@Override
@Transactional(rollbackFor = {ServiceException.class,DataIntegrityViolationException.class})
    public void modifierTournee(Long _tourneeId, String _intitule, Integer _intervalleGPS, String _commentaire) throws ServiceException,DataIntegrityViolationException {
        Tournee tournee;
 
        // Recherche de la tournee
        tournee = tourneeRepository.findOne(_tourneeId);
        if (tournee == null)
            throw new ServiceException("La tournée n'existe pas.");
 
        tournee.setIntitule(_intitule);
        tournee.setIntervalleGPS(_intervalleGPS);
        tournee.setCommentaire(_commentaire);
    }// La modification est effective en BD lors du commit de la transaction
La méthode modifierTournee fonctionne bien. Mon problème est que je souhaiterais intercepter la levée de l'exception DataIntegrityViolationException dans ma méthode afin de lancer une ServiceException . Ainsi, tout client de mon service n'interceptera que des ServiceException et les exceptions de la couche Dao ne seront pas nécessairement visibles au niveau de la couche Client.

Si quelqu'un peut me dire si cela est possible!
Merci d'avance