복붙노트

[SPRING] 스프링 데이터 : "삭제 기준"이 지원됩니까?

SPRING

스프링 데이터 : "삭제 기준"이 지원됩니까?

데이터베이스 접근을 위해 Spring JPA를 사용하고 있습니다. findByName 및 countByName과 같은 예제를 찾을 수 있는데, 어떤 메소드 구현을 작성하지 않아도됩니다. 나는 어떤 조건에 기반한 레코드 그룹을 삭제하는 예제를 찾고 싶다.

Spring JPA는 deleteByName과 같은 삭제 기능을 지원합니까? 모든 포인터를 주셔서 감사합니다.

감사와 감사합니다.

해결법

  1. ==============================

    1.폐기 된 답변 (Spring Data JPA <= 1.6.x) :

    폐기 된 답변 (Spring Data JPA <= 1.6.x) :

    @ 구출에 대한 주석 수정. 그래도 사용자 지정 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);
    }
    

    최신 정보:

    최신 버전의 Spring Data JPA (> = 1.7.x)에서는 삭제, 제거 및 개수 연산에 대한 쿼리 파생에 액세스 할 수 있습니다.

    public interface UserRepository extends CrudRepository<User, Long> {
    
        Long countByFirstName(String firstName);
    
        @Transactional
        Long deleteByFirstName(String firstName);
    
        @Transactional
        List<User> removeByFirstName(String firstName);
    
    }
    
  2. ==============================

    2.Spring Data JPA의 버전 1.6.0.RC1부터 주어진 메소드 이름을 사용하여 삭제 질의를 유도 할 수 있습니다. 키워드 제거 및 삭제가 지원됩니다. 반환 값으로 제거 된 엔터티의 수나 목록 중에서 선택할 수 있습니다.

    Spring Data JPA의 버전 1.6.0.RC1부터 주어진 메소드 이름을 사용하여 삭제 질의를 유도 할 수 있습니다. 키워드 제거 및 삭제가 지원됩니다. 반환 값으로 제거 된 엔터티의 수나 목록 중에서 선택할 수 있습니다.

    Long removeByLastname(String lastname);
    
    List<User> deleteByLastname(String lastname);
    
  3. ==============================

    3.Spring Data JPA의 소스 코드, 특히 PartTreeJpaQuery 클래스를 살펴보면 PartTree를 인스턴스화하려고 시도하는 것을 볼 수있을 것이다. 그 클래스 안에서 다음의 정규식

    Spring Data JPA의 소스 코드, 특히 PartTreeJpaQuery 클래스를 살펴보면 PartTree를 인스턴스화하려고 시도하는 것을 볼 수있을 것이다. 그 클래스 안에서 다음의 정규식

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

    허용되는 것과 그렇지 않은 것을 나타냅니다.

    물론 이러한 메서드를 추가하려고하면 실제로 작동하지 않는 것을 볼 수 있으며 전체 스택 추적을 얻을 수 있습니다.

    Spring Data JPA의 1.5.0 버전을 살펴 보았습니다.

  4. ==============================

    4.Spring JPA에서 직접 제공하는 사전 정의 된 삭제 방법을 사용하는 경우 두 개의 쿼리가 프레임 워크에 의해 실행됩니다.

    Spring JPA에서 직접 제공하는 사전 정의 된 삭제 방법을 사용하는 경우 두 개의 쿼리가 프레임 워크에 의해 실행됩니다.

    이것은 아래에 사용자 지정된 방법을 사용하여 하나의 삭제 쿼리 만 실행되기 때문에 쿼리 코드를 삭제하는 또 다른 최적화 된 방법입니다.

    
    
    @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);
    }
    
    
  5. from https://stackoverflow.com/questions/23723025/spring-data-delete-by-is-supported by cc-by-sa and MIT license