Данные Spring: поддерживается «delete by»?

Я использую Spring JPA для доступа к базе данных. Я могу найти такие примеры, как findByName и countByName, для которых мне не нужно писать какую-либо реализацию метода. Я надеюсь найти примеры для удаления группы записей на основе некоторых условий.

Поддерживает ли Spring JPA удаление deleteByName? Любой указатель оценивается.

С уважением и благодарностью.

Устаревший ответ (Spring Data JPA <= 1.6.x) :

@Modifying annotations к спасению. Тем не менее, вам нужно будет предоставить свое пользовательское поведение SQL.

 @Transactional(readOnly = true) public interface UserRepository extends JpaRepository { @Modifying @Transactional @Query("delete from User u where u.firstName = ?1") void deleteUsersByFirstName(String firstName); } 

Обновить:

В современных версиях Spring Data JPA (> = 1.7.x) вывод запроса для операций delete , remove и count доступен.

 public interface UserRepository extends CrudRepository { Long countByFirstName(String firstName); @Transactional Long deleteByFirstName(String firstName); @Transactional List removeByFirstName(String firstName); } 

Выделение запросов на удаление с использованием имени данного метода поддерживается начиная с версии 1.6.0.RC1 Spring Data JPA. Поддерживаются ключевые слова для remove и delete . В качестве возвращаемого значения можно выбрать между числом или списком удаленных объектов.

 Long removeByLastname(String lastname); List deleteByLastname(String lastname); 

Если вы посмотрите исходный код Spring Data JPA и, в частности, class PartTreeJpaQuery , вы увидите, что пытается создать экземпляр PartTree . Внутри этого classа следующее регулярное выражение

private static final Pattern PREFIX_TEMPLATE = Pattern.compile("^(find|read|get|count|query)(\\p{Lu}.*?)??By")

должен указывать, что разрешено, а что нет.

Конечно, если вы попытаетесь добавить такой метод, вы действительно увидите, что это не работает, и вы получите полную стек.

Я должен отметить, что я использовал просмотр версии 1.5.0.RELEASE из Spring Data JPA

Если вы будете использовать предварительно определенные методы удаления, как напрямую, предоставленные весной JPA, то ниже два запроса будут выполняться инфраструктурой.

  • Сначала собирайте данные (например, id и другой столбец), используя запрос выполнения select с предложением delete where where.

  • то после получения resultSet первого запроса будут выполняться все запросы на удаление для всех id (один за другим)

    Примечание. Это не оптимизировано для вашего приложения, потому что многие запросы будут выполняться для одного запроса на удаление MYSQL.

Это еще один оптимизированный способ удаления кода запроса, потому что только один запрос на удаление будет выполняться с использованием нижеописанных методов.

 @NamedNativeQueries({ @NamedNativeQuery(name = "Abc.deleteByCreatedTimeBetween", query = "DELETE FROM abc WHERE create_time BETWEEN ?1 AND ?2") , @NamedNativeQuery(name = "Abc.getByMaxId", query = "SELECT max(id) from abc") }) @Entity public class Abc implements Serializable { } @Repository public interface AbcRepository extends CrudRepository { int getByMaxId(); @Transactional @Modifying void deleteByCreatedTimeBetween(String startDate, String endDate); } 
  • Можно ли настроить SpringMVC для обработки всех запросов, но исключить каталоги статического содержимого?
  • Использование Spring, сопоставление с root в web.xml, статические ресурсы не найдены
  • Spring Security и @Async (перепутаны проверенные пользователи)
  • Как регистрировать HttpRequest и HttpResponse в файле?
  • получение исключения: не определен bean с именем «springSecurityFilterChain»
  • конфигурация страtagsи именования spring - hibernate 5
  • Невозможно Autowire @Repository аннотированный интерфейс в Spring Boot
  • Как установить заголовок «Принять:» в запросе Spring RestTemplate?
  • Как импортировать Java-config-class в XML-config, чтобы оба контекста имели компоненты?
  • Каковы преимущества контейнеров для инъекций зависимостей?
  • Как использовать Spring перехватчики Hibernate в Spring Boot?
  • Давайте будем гением компьютера.