Skip to content

save() method is raising a DbActionExecutionException on unique key violation [DATAJDBC-611] #831

Closed

Description

@spring-projects-issues

David Lopez opened DATAJDBC-611 and commented

When inserting a new entity which would result on a violation of a UNIQUE key into the database using the default implementation of the save() method of the repository, the call ends raising a DbActionExecutionException instead of a DataAccessException.

More specifically, the call to the NamedParameterJdbcTemplate, invoked from the insert() method of the DefaultDataAccessStrategy, raised a DuplicateKeyException as result of a SQLIntegrityConstraintViolationException generated by the driver. So far so good.
However, this exception is caught at the AggregateChangeExecutor::execute() method and encapsulated into a DbActionExecutionException.

Whereas this seems correct, as this exception provides more information than the original DataAccessException, the fact that a @Repository method is returning this exception instead of DataAccessException one is, IMHO, a violation of the Consistent Exception Hierarchy core principles followed by all the Spring Data subprojects, as stated on its own documentation (Reference Documentation).

For instance, the behaviour of Spring Data JPA is different in this same scenario, raising a DataIntegrityViolationException mapped from a Hibernate exception.

In my project, I fixed this situation defining a PersistenceExceptionTranslator bean
AFAIK, no translator is provided by Spring Data JDBC, as it is based on Spring JDBC, but the use of DbActionExecutionException results on a violation of one of the core principles, at least on this case.


No further details from DATAJDBC-611

Activity

  1. added this to the 4.0 M2 (2025.1.0) milestone on Mar 17, 2025
  2. added 2 commits that reference this issue on Apr 10, 2025
    4d93e0a
    639a093
  3. added 2 commits that reference this issue on Apr 25, 2025
    05270bf
    7340cdf
  4. added 2 commits that reference this issue on May 12, 2025
    3db10cf
    3bf2483
  5. added 2 commits that reference this issue on May 16, 2025
    4e46597
    8225d69
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions