How do you handle massive array deletion of identifiers in Spring Data JPA?

Now I have a User class, I get request data arrayfrom jspor html.

list this Integer[] arr=[5,6,9,10,62,52,21]

and then I use two methods to complete the volume removal action.

@Transactional
@Override
public void deleteUser(Integer id) {

    oneRepository.delete(id);
}


@Transactional
@Override
public void deleteSomeUser(Integer[] ids) {

    for (Integer id : ids) {

        deleteUser(id);

    }

}

I want to know if this is a more efficient method to complete this action.

you can see my magazines: it seems not very good!

[94, 95, 91, 92, 93]
Hibernate: 
    delete 
    from
        sshh_user 
    where
        ID=?


Hibernate: 
    delete 
    from
        sshh_user 
    where
        ID=?



Hibernate: 
    delete 
    from
        sshh_user 
    where
        ID=?



Hibernate: 
    delete 
    from
        sshh_user 
    where
        ID=?



Hibernate: 
    delete 
    from
        sshh_user 
    where
        ID=?



Hibernate: 
    select
        count(practice0_.ID) as col_0_0_ 
    from
        sshh_user practice0_
+4
source share
3 answers

Suppose you have UserRepository:

public interface UserRepository extends JpaRepository<User, Integer> {}

Then you can add a UserRepositoryquery modification to your method, for example the following:

/**
 * Delete all user with ids specified in {@code ids} parameter
 * 
 * @param ids List of user ids
 */
@Modifying
@Query("delete from User u where u.id in ?1")
void deleteUsersWithIds(List<Integer> ids);

, , :

@Transactional
@Override
public void deleteSomeUser(Integer[] ids) {
    oneRepository.deleteUsersWithIds(Arrays.asList(ids));
}

, :

Hibernate: delete from users where id in (? , ? , ?)

Self Invocation, public .

+7

void deleteByIdIn(List<Integer> ids);

Spring .

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

:

Springs, CrudRepository, JpaRespository, , , , , , , ..

, , spring , HQL .

Spring , . , .

CrudRepository<User>:

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

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

+8

All Articles