How do you handle with bulk deleting by an array of IDs in Spring Data JPA?

Just add the following to your user repository interface

void deleteByIdIn(List<Integer> ids);

Spring will automatically generate the appropriate query via method name derivation.

https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query-methods

EDIT: A litte more detail on this

Using Springs Repository interfaces like CrudRepository, JpaRespository brings the basic set of database operations, like create, read, update, delete, paging, sorting and so on.

To manually add some simple queries like searching for a users name or mail address spring provides a fine mechnanism without annotating any string based HQL queries or similar.

Spring just analyses your method names, searching for keywords. Read the documentation link above which keywords are provided.

Example methods for a CrudRepository<User>:

Iterable<User> findByNameLike(String search) resolves to select * from user where name like '<search>'

void deleteByIdIn(List<Integer> ids) resolves to delete from user where id in ([ids])

UPDATE:

This will only work as a real bulk delete in Spring Boot Version < 2.0 !

Since Spring Boot 2.0 it will result in single delete queries to honour JPA Entity Lifecycle Events like preRemove and postRemove.

If you want to really bulk delete, please use the accepted answer.

Leave a Comment

tech