2009-08-07 4 views
6

J'écris une application Spring, et il semble que lorsque je rencontre des erreurs de base de données, parfois ConstraintViolationException de Hibernate est levée et parfois DataIntegrityViolationException de Spring est levée. Y a-t-il une raison pour laquelle on pourrait être jeté et pas l'autre? Est-ce qu'ils veulent dire des choses différentes?ConstraintViolationException VS DataIntegrityViolationException

Répondre

4

Si vous exécutez les appels à Hibernate via le HibernateTemplate, puis Spring se traduira par des exceptions Hibernate (par exemple ConstraintViolationException) dans la hiérarchie des exceptions à ressort (par exemple DataIntegrityViolationException). Si vous n'utilisez pas HibernateTemplate, alors les exceptions natives Hibernate vont passer. Les deux sont RuntimeExceptions, donc n'ont pas besoin d'une gestion explicite des exceptions, donc ce n'est pas toujours évident que vous allez voir.

+0

Je n'utilise pas 'HibernateTemplate', mais je reçois l'exception wrapper de Spring uniquement lorsque la clé primaire est violée. D'autres violations de clé uniques entraînent l'exception d'Hibernate. Le code est identique - seul le type de clé qui est violé est important. –

+0

Utilisez-vous l'annotation @Repository sur votre DAO? – cyotee