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

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

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

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

Ответ 1

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

@Modifying аннотация для спасения. Однако вам нужно будет предоставить свое пользовательское поведение SQL.

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

Update:

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

public interface UserRepository extends CrudRepository<User, Long> {

    Long countByFirstName(String firstName);

    @Transactional
    Long deleteByFirstName(String firstName);

    @Transactional
    List<User> removeByFirstName(String firstName);

}

Ответ 2

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

Long removeByLastname(String lastname);

List<User> deleteByLastname(String lastname);

Ответ 3

Если вы посмотрите на исходный код 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