Issue
I am using SpringData's repository. If I try to delete an entity via an ID which does not exist or never existed it throws an exception. Since I do not want to check whether the entity exists before I delete it, it would be nice that it would fail silently. It would make it easier because the observable behavior is the same - after the call the entity does not exists anymore. Whether it has been deleted or never existed, I do not care.
Is there a way to modify default behavior of delete(EntityId)
so it won't throw an exception, if entity does not exsist?
Documentation of SpringData's delete says that it will throw an exception if an entity does not exist.
Solution
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"
Answered By - davioooh
Answer Checked By - Marilyn (JavaFixing Volunteer)