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

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’지시 만 사용하는 것이 어떻게 다른가요?



답변

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 스펙을 참조하여 후드에서 지원되는 저장소를 구현하는 정의를 제공합니다.


답변

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

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


답변

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 있다는 입니다.


답변