JPA와 Spring Data JPA의 차이점은 무엇입니까?


144

Spring Data-JPA와 JPA의 차이점에 대해 약간 혼란 스럽습니다. JPA에 대해 널리 알려진 ORM 기술을 사용하여 관계형 데이터베이스에 Java 객체를 유지하기위한 사양이라는 것을 알고 있습니다.

즉, JPA는 인터페이스 및 기타 ORM 기술을 제공하고 JPA 공급자 (예 : Hibernate)로 알려진 인터페이스를 구현합니다.

이제 Spring Data JPA 란 정확히 무엇입니까?

Spring Data JPA가 JPA보다 더 많은 기능 (인터페이스)을 추가했지만 여전히 지정되었거나 JPA 제공자입니까?

Spring Data JPA가 리포지토리 (DAO 계층 : 내가 틀리지 않은 경우)를 해결하는 것을 보았습니다. 그래서 'Spring Data JPA + Hibernate'를 사용하거나 'Hibernate'지시 만 사용하는 것이 어떻게 다른가요?

답변:


126

Spring을 보았습니다 .JPA는 리포지토리 (DAO 계층 : 내가 틀리지 않은 경우)를 해결합니다. 그래서 'Spring JPA + Hibernate'를 사용하거나 'Hibernate'를 직접 사용하는 것만 어떻게 다른가?

말했듯이 JPA사양 이지만 Hibernate 는 해당 사양의 특정 구현입니다 (이러한 구현은 일반적으로 공급자 라고합니다 ). Hibernate를 사용하면 필요할 때 다른 옵션으로 전환 할 수있는 자유를 제한하는 공급자에게 자신을 묶는다 (예를 들어, Hibernate는 개발 프로세스를 중단시키는 버그가 있기 때문에 대신 EclipseLink 또는 ObjectDB를 사용하려고한다).

스프링 데이터 인용 JPA 문서 인용 :

애플리케이션의 데이터 액세스 계층을 구현하는 것은 꽤 번거로 웠습니다. 상용구 코드를 너무 많이 작성해야했습니다. 도메인 클래스는 빈혈이었고 실제 객체 지향 또는 도메인 기반 방식으로 설계되지 않았습니다.

이 두 가지 기술을 모두 사용하면 개발자가 풍부한 도메인 모델의 지속성과 관련하여 훨씬 쉽게 생활 할 수 있습니다. 그럼에도 불구하고 리포지토리를 구현하는 상용구 코드의 양은 특히 여전히 높습니다. 따라서 스프링 데이터의 저장소 추상화의 목표는 다양한 지속성 저장소에 대한 데이터 액세스 계층을 구현하려는 노력을 줄이는 것입니다.

요약하면 JPA 위에 또 다른 추상화 계층을 추가 하여 스프링 컨텍스트에서 Persistence Layer 를 지원하는 표준 기반 디자인을 정의합니다 . 정의 된 인터페이스 (Spring으로 알려진)는 프레임 워크가 JPA를 사용하여 결과를 제공하는 서비스를 제공합니다. Spring이 프로젝트를 스캔하고 찾는 방법으로 저장소를 정의합니다.

<repositories base-package="com.acme.repositories" />

따라서 컨테이너의 컨텍스트 나 외부에서 사용할 수 있습니다.

Spring, JPA는 정확히 무엇입니까? Spring, JPA는 JPA보다 더 많은 기능 (인터페이스)을 추가했지만 여전히 지정되었거나 JPA 공급자입니까?

Spring Data JPA는 사용자가 정의한 제공자를 사용하여 JPA 스펙을 참조하여 후드에서 지원되는 저장소를 구현하는 정의를 제공합니다.


1
Spring이 관리하는 엔티티 컬렉션을 Repository라고 부를 수 있습니까? 이유를 모르겠지만 리포지토리를 사용하는 Spring JPA 지원은 EJB의 EntityManager와 매우 유사 해 보입니다. 올바른 생각인지 또는 목적이 완전히 다른가요? 미리 감사드립니다. 무스타파.
Mustafa

1
@Mustafa 대부분의 솔루션에는 공통된 근거가 있습니다. 목표가 동일 할 수는 있지만 관련 인터페이스로 인해 구현이 다릅니다.
프리츠

35

JPA라고도하는 Java Persistence API는 JavaSE (Java Platform, Standard Edition) 및 JavaEE (Java Platform, Enterprise Edition)를 사용하여 애플리케이션에서 관계형 데이터를 관리하는 Java 프레임 워크입니다.

이 맥락에서 지속성은 세 가지 영역을 다룹니다.

  • javax.persistence패키지에 정의 된 API 자체 .

  • JPQL (Java Persistence Query Language).

  • 객체 관계형 메타 데이터.

    여기에 이미지 설명을 입력하십시오

Spring Data JPA는 JPA 기반 리포지토리를보다 쉽게 ​​구현할 수있는 포괄적 인 Spring Data 프로젝트의 일부입니다.

풍모:

  • Spring 및 JPA를 기반으로 리포지토리 구축을위한 정교한 지원
  • QueryDSL 술어 및 유형 안전 JPA 쿼리 지원
  • 도메인 클래스의 투명한 감사
  • 페이지 매김 지원, 동적 쿼리 실행, 사용자 지정 데이터 액세스 코드 통합 기능
  • @Query부트 스트랩 시간 에 주석 이 달린 쿼리의 유효성 검사
  • XML 기반 엔터티 매핑 지원
  • 소개를 통한 JavaConfig 기반 저장소 구성 @EnableJpaRepositories

    여기에 이미지 설명을 입력하십시오

3

JPA

JPA는 Java 오브젝트가 관계형 데이터베이스 시스템에 맵핑되는 방식을 표준화하는 스펙입니다. 단지 사양이기 때문에, JPA는 인터페이스 등의 집합으로 구성 EntityManagerFactory, EntityManager도움이 데이터베이스 테이블에 자바 엔티티 객체를 매핑하는 것을 및 주석.

사용할 수있는 HIbernate, EclipseLink 또는 Open JPA와 같은 여러 JPA 제공자가 있습니다.

스프링 데이터 JPA

스프링 데이터 JPA는 JPA 데이터 액세스 추상화입니다. JPA와 마찬가지로 Spring Data JPA는 JPA 제공자없이 작동 할 수 없습니다.

Spring Data JPA는 DDD Repository패턴 또는 솔루션에 대한 솔루션을 제공 합니다 DAO (Data Acess Object) pattern. 또한 메소드 이름 규칙을 통해 JPA 쿼리를 생성 할 수도 있습니다.

Spring Data JPA는 Hibernate, Eclipse Link 또는 다른 JPA 제공자와 함께 작동 할 수 있습니다. Spring 또는 Java EE를 사용하면 매우 흥미로운 이점은 주석을 사용하여 트랜잭션 경계를 선언적으로 제어 할 수@Transactional 있다는 입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.