Почему метод удаления данных пружины (JPA) не имеет возвращаемых значений? - PullRequest
2 голосов
/ 06 апреля 2020

Я использовал метод удаления Spring Data JPA на уровне сервиса, но мне интересно, почему ни метод deleteById, ни метод delete не имеют возвращаемых значений.

Если мы проверяем реализацию осторожно метод удаления, есть if заявление , что, когда сущность, которую нужно удалить, не существует, ничего не возвращает.

public void delete(T entity) {

    Assert.notNull(entity, "Entity must not be null!");

    if (entityInformation.isNew(entity)) {
        return;
    }

    Class<?> type = ProxyUtils.getUserClass(entity);

    T existing = (T) em.find(type, entityInformation.getId(entity));

    // if the entity to be deleted doesn't exist, delete is a NOOP
    if (existing == null) {
        return;
    }

    em.remove(em.contains(entity) ? entity : em.merge(entity));
}

Лично я думаю, что возвращение значение Boolean может быть адекватным подходом в этом случае, потому что уровень контроллера будет знать о статусе удаления, а уровень представления может быть снабжен гораздо более надежным предупреждающим сообщением.

Ответы [ 2 ]

2 голосов
/ 06 апреля 2020

Spring Data JPA разрабатывает некоторый встроенный метод таким образом, как они думают, и дает нам возможность использовать и другой способ. Вы можете легко получить удаленные записи и их количество, используя производный запрос на удаление, поддерживаемый Spring Data JPA. Ссылка

@Repository
public interface FruitRepository extends JpaRepository<Fruit, Long> {
    Fruit deleteById(Integer id); // To get deleted record
    Long deleteById(Integer id); // To get deleted record count
}
1 голос
/ 06 апреля 2020

Итак, что вы собираетесь делать с информацией?

Операция удаления просто удаляет объект, если он существует. Если нет объекта с соответствующим идентификатором, нет необходимости удалять его (очевидно)!

Вы не получите никакой дополнительной информации из возвращаемого значения. Если метод delete вернет логическое значение, вы должны исследовать, что произошло, если значение равно false. Что указывает на то, что объект не может быть удален.

Гораздо менее подвержен ошибкам полагаться на исключение в случае любого сбоя во время процесса удаления.

В этом контексте вы должны просто доверять что объект был удален без какой-либо ошибки.

Поэтому, если вам необходимо обновить какое-либо представление, вы просто обновите представление после удаления. Если вам нужно полагаться на сигнал о том, что удаление завершено, вам может понадобиться реализация, подобная наблюдателю, которая обновит ваше представление об успешном удалении.

Но трудно ответить на ваш вопрос без дополнительной информации о том, кто вы пытаясь достичь.

...