Как удалить список объектов - PullRequest
1 голос
/ 18 марта 2020

У меня есть запрос JPA для удаления выбранных объектов, который хранится в списке. В настоящее время я удаляю объекты в al oop с помощью встроенного метода JPA delete () 1 на 1. Есть ли способ просто передать список вместо его зацикливания?

Текущая реализация, которая работает, но зацикливается на удаление 1 на 1. Мне нужен начальный запрос для получения списка сущностей по другим причинам, поэтому я не собираюсь это менять. Просто способ пройти в список объектов для удаления. Пожалуйста посоветуй. Спасибо.

Примечание. Это относится к Java 8 и Spring 4.3, если это имеет значение.

@GetMapping("/delete/{name}/{count}")
public String delete(@PathVariable String name, @PathVariable int count){
    boolean isDelete = true;
    while (isDelete){
        //1st query
        List<PersonEntity> results = personService.get(name, count);
        if(results != null && !results.isEmpty()){
            System.out.println("Deleting following: ");
            //2nd query
            results.forEach(p -> {
                System.out.println(p.getName());
                personService.delete(p);
            });
        } else {
            isDelete = false;
        }
    }
    return "Done!";
}

1 Ответ

1 голос
/ 19 марта 2020

Вы можете попробовать что-то вроде этого:

List<PersonEntity> results = personService.get(name, count);
if(results != null && !results.isEmpty()) {
    List<Integer> personIds = results.stream()
        .map(personIds)
        .collect(Collectors.toList());
    personService.deleteManyById(personIds);

В вашем сервисе:

public void deleteManyById(List<Integer> ids) {
    personRepository.deleteByIdIn(ids);
}

В вашем репо (при условии, что это пружинный JpaRepository):

void deleteByIdIn(List<Integer> ids);

Просто помните о том, что в базе данных есть ограничение на количество параметров, которые вы можете передать в состоянии IN

...