복붙노트

[SPRING] Spring Data JPA의 CrudRepository와 JpaRepository 인터페이스의 차이점은 무엇입니까?

SPRING

Spring Data JPA의 CrudRepository와 JpaRepository 인터페이스의 차이점은 무엇입니까?

Spring Data JPA의 CrudRepository와 JpaRepository 인터페이스의 차이점은 무엇입니까?

웹상에서 예제를 볼 때, 나는 거기에 그들이 교환 할 수있는 종류의 사용을 참조하십시오. 그들 사이의 차이점은 무엇입니까? 왜 다른 것을 사용하고 싶습니까?

해결법

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

    1.JpaRepository는 PagingAndSortingRepository를 확장하여 CrudRepository를 확장합니다.

    JpaRepository는 PagingAndSortingRepository를 확장하여 CrudRepository를 확장합니다.

    주요 기능은 다음과 같습니다.

    위에서 언급 한 상속 때문에 JpaRepository는 CrudRepository 및 PagingAndSortingRepository의 모든 기능을 갖습니다. 따라서 JpaRepository와 PagingAndSortingRepository가 제공하는 기능을 저장소에 필요로하지 않는다면 CrudRepository를 사용하십시오.

  2. ==============================

    2.켄의 대답은 기본적으로 옳았지 만, "왜 다른 것을 사용하고 싶습니까?"라고 말하고 싶습니다. 당신 질문의 일부.

    켄의 대답은 기본적으로 옳았지 만, "왜 다른 것을 사용하고 싶습니까?"라고 말하고 싶습니다. 당신 질문의 일부.

    저장소에 대해 선택한 기본 인터페이스에는 두 가지 주요 목적이 있습니다. 첫째, Spring Data 저장소 인프라가 인터페이스를 찾고 프록시 생성을 트리거하여 인터페이스 인스턴스를 클라이언트에 삽입 할 수 있습니다. 두 번째 목적은 추가 메서드를 선언 할 필요없이 인터페이스에 필요한만큼의 기능을 가져 오는 것입니다.

    스프링 데이터 코어 라이브러리는 전용 기능 세트를 제공하는 두 개의 기본 인터페이스와 함께 제공됩니다.

    개별 저장소 모듈 (예 : JPA 또는 MongoDB 용)은 이러한 기본 인터페이스의 저장소 별 확장을 노출하여 일부 상점 세부 사항을 고려한 플러시 또는 전용 일괄 처리와 같은 저장소 별 기능에 액세스 할 수 있도록합니다. 예를 들어 delete (...)와는 다른 JpaRepository의 deleteInBatch (...)는 JPA 정의 된 캐스케이드를 트리거하지 않는 부작용이있는 주어진 엔티티를 삭제하는 쿼리를 사용하므로 (예 : spec은 그것을 정의한다).

    일반적으로 기본 인터페이스를 사용하지 않는 것이 좋습니다. 기본 인터페이스가 클라이언트에 공개되어 클라이언트와 저장소 간의 결합을 강화합니다. 게다가, 기본적으로 "엔티티 컬렉션"인 리포지토리의 원래 정의에서 조금 벗어납니다. 그래서 가능하다면 PagingAndSortingRepository를 유지하십시오.

    제공된 기본 인터페이스 중 하나에 직접 의존하는 단점은 두 가지입니다. 두 가지 모두 이론적 인 것으로 간주 될 수 있지만 나는 그들이 알고 있어야하는 것이 중요하다고 생각합니다.

    이러한 단점을 모두 해결할 수있는 솔루션은 사용자 자신의 기본 저장소 인터페이스 또는 그 세트를 만드는 것입니다. 많은 응용 프로그램에서 나는 다음과 같은 것을 보았습니다 :

    interface ApplicationRepository<T> extends PagingAndSortingRepository<T, Long> { }
    
    interface ReadOnlyRepository<T> extends Repository<T, Long> {
    
      // Al finder methods go here
    }
    

    첫 번째 리포지토리 인터페이스는 실제로는 지점 1 만 수정하는 일반 용도의 기본 인터페이스이지만 일관성을 위해 ID 유형을 Long으로 연결합니다. 두 번째 인터페이스는 일반적으로 CrudRepository와 PagingAndSortingRepository에서 복사 한 모든 찾기 ... (...) 메소드를 가지고 있지만 조작중인 메소드는 노출하지 않습니다. 참조 문서에서 그 접근법에 대해 더 자세히 읽어보십시오.

    리포지토리 추상화를 통해 아키텍처 및 기능 요구 사항에 따라 완전히 변경된 기본 리포지토리를 선택할 수 있습니다. 필요한 경우 박스에서 제공되는 것들을 사용하고, 필요한 경우 저장소 기본 인터페이스를 제작하십시오. 피할 수없는 경우를 제외하고 저장소 별 저장소 인터페이스에서 벗어나십시오.

  3. ==============================

    3.

    개요:

    CrudRepository 인터페이스는 CRUD 작업을위한 메서드를 제공하므로 사용자가 직접 메서드를 정의 할 필요없이 레코드를 만들고, 읽고, 업데이트하고 삭제할 수 있습니다.

    PagingAndSortingRepository는 페이지 매김 및 정렬을 사용하여 엔터티를 검색하는 추가 메서드를 제공합니다.

    마지막으로 JpaRepository는 JPA에 고유 한 몇 가지 기능을 추가합니다.

  4. from https://stackoverflow.com/questions/14014086/what-is-difference-between-crudrepository-and-jparepository-interfaces-in-spring by cc-by-sa and MIT license