Updated Answer (after downvotes)
My original answer (below) is actually wrong: my understanding of the question was influenced also by the missing reference to the EmptyResultDataAccessException
in the official JavaDoc (as reported by Adrian Baker in his comment).
So a better solution to this issue could be the one suggested by Yamashiro Rion
if (repository.existsById(entityId)) {
repository.deleteById(entityId);
}
or this one (without the if
, but probably worse performing):
repository.findById(entityId)
.map(repository::delete)
Original (Wrong) Answer
JavaDocs says that an IllegalArgumentException
will be thrown if the provided argument (id, entity, Iterable<T>
) is null and not if entity does not exsits.
If you need to avoid the IllegalArgumentException
you could implement a custom delete method that checks id != null
:
public void customDelete(ID id) {
if(id != null){
this.delete(id);
}
}
Take a look to this docs section if you don’t know how to add “Custom implementations for Spring Data repositories”
A viable solution that requires less code is to add a new method to the repository interface like this:
// @Modifying is necessary depending on your version of Spring
@Modifying
@Query(nativeQuery=true, value="DELETE FROM MY_TABLE WHERE ID = ?1")
public void deleteById(IdPrimitiveType id);`
–> to be tested if this can used with JPQL instead of native SQL to allow more complex id types than the default ones (int, long, String, …)