[SPRING] 스프링 데이터 : "삭제 기준"이 지원됩니까?
SPRING스프링 데이터 : "삭제 기준"이 지원됩니까?
데이터베이스 접근을 위해 Spring JPA를 사용하고 있습니다. findByName 및 countByName과 같은 예제를 찾을 수 있는데, 어떤 메소드 구현을 작성하지 않아도됩니다. 나는 어떤 조건에 기반한 레코드 그룹을 삭제하는 예제를 찾고 싶다.
Spring JPA는 deleteByName과 같은 삭제 기능을 지원합니까? 모든 포인터를 주셔서 감사합니다.
감사와 감사합니다.
해결법
-
==============================
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.Spring Data JPA의 버전 1.6.0.RC1부터 주어진 메소드 이름을 사용하여 삭제 질의를 유도 할 수 있습니다. 키워드 제거 및 삭제가 지원됩니다. 반환 값으로 제거 된 엔터티의 수나 목록 중에서 선택할 수 있습니다.
Spring Data JPA의 버전 1.6.0.RC1부터 주어진 메소드 이름을 사용하여 삭제 질의를 유도 할 수 있습니다. 키워드 제거 및 삭제가 지원됩니다. 반환 값으로 제거 된 엔터티의 수나 목록 중에서 선택할 수 있습니다.
Long removeByLastname(String lastname); List<User> deleteByLastname(String lastname);
-
==============================
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.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); }
from https://stackoverflow.com/questions/23723025/spring-data-delete-by-is-supported by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring MVC에서 리다이렉트 (0) | 2018.12.12 |
---|---|
[SPRING] Spring의 JSF 뷰 범위 (0) | 2018.12.12 |
[SPRING] 봄과 최대 절전 모드 : 현재 스레드에 대한 세션이 없습니다. (0) | 2018.12.12 |
[SPRING] JPA @Entity 내부의 빈 주입 (0) | 2018.12.12 |
[SPRING] 커스텀 컨트롤러 메소드를위한 Spring Boot에서 HAL 직렬화 사용 (0) | 2018.12.12 |