Я использую Spring JPA для доступа к базе данных. Я могу найти такие примеры, как findByName и countByName, для которых мне не нужно писать какую-либо реализацию метода. Я надеюсь найти примеры удаления группы записей по какому-либо условию.
Поддерживает ли Spring JPA удаление, подобное deleteByName? Любой указатель приветствуется.
С уважением и благодарностью.
spring
spring-data
spring-data-jpa
любопытный1
источник
источник
DELETE FROM x WHERE id = ?1 or parent_id = ?1
. Кстати, убедитесь, что у вас нет типаparent__id
(у вас намеренно есть двойной низкий рывок?). Но почему вы используете собственный вариант запроса?Создание запросов на удаление с использованием данного имени метода поддерживается, начиная с версии 1.6.0.RC1 Spring Data JPA. Ключевые слова
remove
иdelete
поддерживаются. В качестве возвращаемого значения можно выбрать количество или список удаленных объектов.источник
Если вы посмотрите на исходный код Spring Data JPA и, в частности, на
PartTreeJpaQuery
класс, вы увидите, что он пытается создать экземплярPartTree
. Внутри этого класса следующее регулярное выражениеprivate static final Pattern PREFIX_TEMPLATE = Pattern.compile("^(find|read|get|count|query)(\\p{Lu}.*?)??By")
должен указать, что разрешено, а что нет.
Конечно, если вы попытаетесь добавить такой метод, вы на самом деле увидите, что он не работает, и получите полную трассировку стека.
Я должен отметить, что я использовал версию
1.5.0.RELEASE
Spring Data JPAисточник
2 способа: -
1-й пользовательский запрос
Второй запрос JPA по методу
Когда вы переходите с запросом по методу (2-й способ), он сначала выполняет вызов get
Затем он загрузит его в список. Затем он будет вызывать удаление идентификатора один за другим.
Сначала получить список объектов, затем цикл для удаления идентификаторов по одному
Но, 1-й вариант (индивидуальный запрос),
Это всего лишь один запрос. Он удалит везде, где существует значение.
Пройдите и по этой ссылке https://www.baeldung.com/spring-data-jpa-deleteby
источник
Если вы будете использовать предопределенные методы удаления, которые напрямую предоставлены Spring JPA, то платформа будет выполнять два запроса ниже.
Сначала соберите данные (например, идентификатор и другой столбец), используя выполнение запроса выбора с предложением где удалить запрос.
затем после получения resultSet первого запроса будут выполняться вторые запросы на удаление для всех идентификаторов (один за другим)
Примечание. Это не оптимизированный способ для вашего приложения, потому что многие запросы будут выполняться для одного запроса на удаление MYSQL.
Это еще один оптимизированный способ удаления кода запроса, потому что только один запрос на удаление будет выполняться с использованием указанных ниже настраиваемых методов.
источник
Будьте осторожны при использовании производного запроса для пакетного удаления. Это не то, что вы ожидаете: DeleteExecution
источник
Да, метод deleteBy поддерживается. Для его использования необходимо аннотировать метод с помощью @Transactional.
источник
вот мои 2 цента. Вы также можете использовать собственные запросы, например:
источник