JPA와 최대 절전 모드의 차이점은 무엇입니까? [닫은]


680

JPA 2는 사양이고 Hibernate는 ORM 도구입니다. 또한 Hibernate는 JPA 2보다 더 많은 기능을 가지고 있음을 이해합니다. 그러나 실제적인 관점에서 실제로 차이점은 무엇입니까?

iBatis를 사용한 경험이 있으며 지금은 최대 절전 모드 또는 JPA2를 배우려고합니다. Pro JPA2 책을 집어 들고 "JPA 공급자"를 계속 참조합니다. 예를 들면 다음과 같습니다.

기능이 표준화되어야한다고 생각되면 JPA 제공 업체에 문의하여 요청해야합니다.

이것은 나를 혼란스럽게하므로 몇 가지 질문이 있습니다.

  • JPA2 만 사용하면 POJO에 주석을 달아 DB에서 데이터를 가져올 수 있습니다.
  • JPA2를 TopLink 또는 Hibernate와 같은 "JPA Provider"와 함께 사용해야합니까? 그렇다면 JPA2 + Hibernate를 JPA2 단독 또는 Hibernate 단독과 비교하여 사용하면 어떤 이점이 있습니까?
  • 실용적인 JPA2 책을 추천 해 줄 수 있습니까? "Pro JPA2"는 JPA2에 대한 성경과 참조처럼 보입니다 (이 책의 후반까지는 쿼리에 들어 가지 않습니다). JPA2에 대한 문제 / 해결 방법을 다루는 책이 있습니까?

2
"JPA와 최대 절전 모드의 차이점"에 대한 질문이 잘못되었습니다. 배틀 하이버 네이트 vs JPA는 무의미하다. 다른 ORM을 구현하지 않으려면 JPA API와 함께 JPA 구현을 사용하는 것이 좋습니다.
BERGUIGA Mohamed Amine

18
@ Berguiga.M.Amine, 우리가 이미 위의 질문이 잘못되었다는 것을 알고 있다면. 더 이상 묻지 않아도됩니다. 나는 또한이 주제에 관심이있다.
Nhu Vy

스프링 "org.springframework.orm.jpa.JpaTemplate"에서 사용되는 JpaTemplate과 혼동이 있습니다. persist (), find (), merge () 등과 같은 자체 기능을 가지고 있으며 최대 절전 모드없이 작동하는 방식은 무엇입니까?
nitin verma

@nitinverma : 그것은 별개의 질문입니다. 그래도 답변이 필요하면 더 많은 피드백을 받기 위해 별도의 질문을하는 것이 좋습니다.
Wouter

답변:


776

JPA는 단지 사양 일 뿐이므로 구현이 없음을 의미합니다. JPA 주석으로 원하는만큼 클래스에 주석을 달 수 있지만 구현하지 않으면 아무 일도 일어나지 않습니다. Hibernate의 JPA 구현은 JPA 사양에 정의 된대로 API를 충족하고 기본 기능을 제공하는 코드 인 반면, JPA는 반드시 따라야하는 지침 또는 인터페이스로 생각하십시오.

JPA와 함께 Hibernate를 사용할 때 실제로 Hibernate JPA 구현을 사용하고 있습니다. 이것의 장점은 Hibernate의 JPA 구현을 다른 JPA 사양 구현으로 교체 할 수 있다는 것입니다. straight Hibernate를 사용하면 다른 ORM이 다른 메소드 / 구성 및 주석을 사용할 수 있으므로 다른 ORM으로 전환 할 수 없으므로 구현에 고정됩니다.

자세한 설명은 내 블로그 항목을 참조하십시오 .


5
따라서 JPA와 함께 Hibernate를 사용할 때 {java.persistence} 주석이 작동하거나 {org.hibernate} 주석을 사용해야합니까?
Amruta

62
하나의 ORM을 다른 ORM으로 바꾸는 것은 매우 드문 일이므로 JPA를 사용하면이 이점을 얻지 못할 것입니다. JPA를 통해 얻을 수있는 것은 다른 사람과 의사 소통하는 데 사용할 수있는 프로토콜, 표준, 명명 및 기타 규칙입니다.
pubsy

3
@pubsy 동의하지만, 원칙적으로 이는 사양의 판매 포인트 중 하나입니다.
Kevin Bowersox

6
@Amruta는 JPA와 함께 Hibernate를 사용할 때 {java.persistence} 주석이 작동하며 {org.hibernate} 주석을 사용할 필요가 없습니다.
Learner

3
@JavaGeek는 코드가 JPA에 언급 된 인터페이스 만 사용하는 한 사실입니다. 최대 절전 모드 전용 기능을 사용하는 경우 org.hibernate주석 을 사용해야합니다 . 이것에 더 많은
Suryavanshi

632

JPA는 댄스이고, Hibernate는 댄서입니다.


189
JPA는 예술이고, 최대 절전은 예술가입니다.
Lucky

10
나는 유머 감각이 마음에 든다 :) JPA는 감독, Hibernate는 배우이다.
user3278897

7
그러나 댄서 (Hibernate)는 댄스없이 수행 할 수있다 (JPA) 그렇지 않다 : /
RevanthKrishnaKumar V.

3
이 답변은 아무 것도 설명하지 않고 모호한 말입니다.
Amir Kost

11
이 은유는 이해를 추가하지 않습니다. 이미 그 차이를 알고 있다면 그 차이를 볼 수 있습니다. 차이를 모르더라도 여전히 알 수 없습니다.
Nick Volynkin

158

언어에 대한 역사적 관점과 JCP에 대한 이해가 없으면 이해하기가 너무 어렵습니다.

기능을 수행하거나 공식 JDK의 일부가 아닌 차이를 메우는 패키지를 개발하는 타사가 종종 있습니다. 여러 가지 이유로 해당 기능이 JCP (Java Community Process)를 통해 Java JDK의 일부가 될 수 있습니다.

Hibernate (2003 년)는 SQL을 추상화하는 방법을 제공했으며 개발자가 ORM (Persisting Objects)에 대해 더 많은 생각을 할 수있게했습니다. Entity 객체에 대해 최대 절전 모드에 알리면이를 유지하기위한 전략이 자동으로 생성됩니다. Hibernate는이를 수행하기위한 구현과 XML 구성 또는 주석을 통해 구현을 추진하기위한 API를 제공했다.

이제 근본적인 문제는 코드가 특정 공급 업체 (Hibernate)와 밀접하게 결합되어 많은 사람들이보다 일반적인 것으로 생각하는 것입니다. 따라서 일반 지속성 API가 필요합니다.

한편, Hibernate 및 기타 ORM 툴 벤더로부터 많은 정보를 얻은 JCP는 JSR 220 (Java Specification Request)을 개발하여 JPA 1.0 (2006) 및 JSR 317 인 JPA 2.0 (2009)을 개발했습니다. 다음은 일반적인 Java Persistence API의 스펙입니다. API는 JDK에서 일련의 인터페이스로 제공되므로 클래스가 javax.persistence에 의존 할 수 있으며 객체를 유지하는 작업을 수행하는 특정 공급 업체에 대해 걱정하지 않아도됩니다. 이것은 API 일 뿐이며 구현이 아닙니다. 최대 절전 모드는 이제 JPA 2.0 사양을 구현하는 많은 공급 업체 중 하나가되었습니다. JPA로 코딩하고 요구에 맞는 호환 ORM 공급 업체를 선택할 수 있습니다.

Hibernate가 JPA로 코드화되지 않은 기능을 제공 할 수있는 경우가 있습니다. 이 경우 JPA는 해당 작업을 수행하기위한 인터페이스를 제공하지 않으므로 클래스에 직접 Hibernate 특정 주석을 삽입하도록 선택할 수 있습니다.

출처 : http://www.reddit.com/r/java/comments/16ovek/understanding_when_to_use_jpa_vs_hibernate/


2
좋은 역사 부분. 다른 답변은 문제의 내용을 반복합니다.
Robert

1
정밀도를 높이는 사람들에게 감사합니다. JPA는 Hibernate와 밀접하게 결합 된 응용 프로그램 때문에 추상화가 필요했기 때문에 JPA가 완료되었다고 말했습니다. 그러나 그것은 무한한 문제가 아닌가? 응용 프로그램이 이제 JPA에 단단히 연결되어 있지 않습니까? 여기에 진정한 이점은 무엇입니까? 나는 이미 최대 절전 모드를 추상화 계층으로 본다 ...
Aphax

4
@Aphax Sure, 그리고 .java 파일을 코딩 할 때 Java에도 밀접하게 연결되어 있으므로 내일 파이썬으로 전환하려면 어떻게해야합니까?
Smutje

100

JPA 는 인터페이스이고 Hibernate는 구현입니다.

전통적으로 여러 Java ORM 솔루션이있었습니다.

고유 한 매핑 정의 또는 클라이언트 API를 정의하는 각 구현 JPA 전문가 그룹은 이러한 모든 도구를 최대한 활용하여 Java Persistence API 표준을 만들었습니다.

표준 지속성 API는 클라이언트 관점에서 매우 편리하므로 한 구현을 다른 구현 으로 쉽게 전환 할 수 있습니다 (실제로는 큰 프로젝트에서는 특정 비표준 기능을 사용해야하기 때문에 그렇게 간단하지는 않습니다) .

표준 JPA는 Java ORM 경쟁을 새로운 차원으로 끌어 올렸으며 이는 더 나은 구현으로 이어질 수 있습니다.

으로는 설명 내 책, 고성능 자바 지속성 , 아직 JPA에서 지원하지 않는 최대 절전 모드 제공 기능 :

이러한 추가 기능을 통해 Hibernate는 대기업 응용 프로그램이 요구하는 많은 지속성 요구 사항을 해결할 수 있습니다.


이것은 좋은 것입니다, 나는 다른 ORM 도구에 대해 이전에
몰랐습니다

큰 대답과 나는 책을 엄청나게 즐기고 있습니다! 공개해 주셔서 감사합니다!
JonasJSchreiber

고성능 Java Persistence 책 을 즐겨 주셔서 감사합니다 .
Vlad Mihalcea 16:26에

이 ~ JPA는 인터페이스이지만 Hibernate는 구현입니다
Eddie B

57

로부터 위키 .

Java Persistence API 작성 동기

많은 엔터프라이즈 Java 개발자는 엔티티 Bean 대신 오픈 소스 프레임 워크 또는 데이터 액세스 오브젝트가 제공하는 경량 지속 오브젝트를 사용합니다. 엔티티 Bean 및 엔터프라이즈 Bean은 너무 무겁고 복잡하다는 명성을 얻었으며 Java EE 애플리케이션 서버에서만 사용할 수있었습니다. 써드 파티 지속성 프레임 워크의 많은 기능이 Java Persistence API에 통합되었으며, 2006 년 현재 Hibernate (버전 3.2) 및 Open-Source Version TopLink Essentials와 같은 프로젝트가 Java Persistence API의 구현이되었습니다.

JCP 페이지 에서 알 수 있듯이 Eclipse 링크는 JPA에 대한 참조 구현입니다. 이에 대한 자세한 내용 은 이 답변 을 살펴보십시오 .

JPA 자체에는 표준 ORM 프레임 워크를 구성하는 기능이 있습니다. JPA는 Java EE 사양의 일부이므로 프로젝트에서 JPA를 단독으로 사용할 수 있으며 모든 Java EE 호환 서버 와 함께 작동해야합니다 . 예,이 서버에는 JPA 사양에 대한 구현이 있습니다.

JPA 가 최대 절전 모드를 도입 하면 최대 절전 모드는 가장 인기있는 ORM 프레임 워크입니다 . JPA의 사양. 최대 절전 모드를 따라야한다는 기본 사양 외에도 많은 추가 기능이 제공됩니다.


3
그것은 프로젝트에서 JPA를 단독으로 사용할 수 있다고 말했습니다. ?? Hibernate, TopLink 또는 다른 JPA 구현을 사용하지 않고 의미합니까?
abbas

2
@abbas 예. Java EE 스펙은 JPA 만 사용합니다. 최대 절전 모드를 추가하면 몇 가지 추가 기능이 제공됩니다.
ManuPK

1
JPA는 인터페이스 / 사양 일 뿐이라고 들었습니다. 프로젝트에서 JPA를 단독으로 사용한다면 어디에서 구현할 수 있습니까?
abbas

@abbas 의견에 감사드립니다. 답변에 자세한 내용을 추가했습니다. 도움이 되었기를 바랍니다.
ManuPK

1
@Forhad 일부 서버 아키텍처에 묻 히든 상관없이 항상 구현이 필요합니다 .JPA 라이브러리를 다운로드하여 지속성을 수행 할 수있는 방법은 없습니다.
Kevin Bowersox '12

15

JPA는 구체적인 구현이 필요한 사양 일뿐입니다. 오라클이 제공 하는 기본 구현 은 "Eclipselink"입니다. (Toplink는 eclipselink와 병합하기 위해 Oracle에서 Eclipse 재단에 기증했습니다)

(참고 : http://www.oracle.com/technetwork/middleware/toplink/index-085257.html http://www.eclipse.org/org/press-release/20080317_Eclipselink.php )

Eclipselink를 사용하면 필요한 경우 코드를 모든 구현에 이식 할 수 있습니다. Hibernate는 완전한 JPA 구현 + MORE (JPA Plus의 정렬)입니다. Hibernate는 추가적인 Hibernate 고유의 기능을 가진 JPA의 슈퍼 세트입니다. 따라서 Hibernate에서 개발 된 앱은 다른 구현으로 전환 될 때 호환되지 않을 수 있습니다. 여전히 최대 절전 모드는 JPA 구현 및 널리 사용되는 대다수 개발자의 선택입니다.

또 다른 JPA 구현은 Kodo 구현의 확장 인 OpenJPA (openjpa.apache.org)입니다.


15

JPA : 인터페이스 와 같습니다 와 JPA에있는 함수를 사용하기위한 구체적인 구현이 없습니다.

최대 절전 모드 : JPA 에서 함수를 구현하고 JPA에는 없을 수있는 추가 기능을 가질 수 있는 JPA 공급자 입니다.

팁 : 사용할 수 있습니다

     *combo 1* : JPA + JPA Provider(Hibernate) 
     *combo 2* : only Hiberante which does not need any interface 

콤보 1 : 최대 절전 모드가 더 나은 성능을 제공하지 않는다고 생각하고 JPA 공급자를 다시 한 번 작성하지 않아도되는 시간을 변경하려는 경우 사용됩니다. 다른 JPA 제공자를 작성할 수 있으며 가능한 한 많이 변경할 수 있습니다.

콤보 2 : JPA Provider를 어떤 비용으로도 변경하지 않을 때보 다 훨씬 적게 사용됩니다.

http://blog-tothought.rhcloud.com//post/2를 방문 하면 혼동이 확실해집니다.


11

JPA는 인터페이스이고, Hibernate는 그 인터페이스의 하나의 구현입니다.


2
그리고 그 위에 Hibernate는 더 많은 기능 / 방법을 추가합니다.
rai.skumar


5

JPA는 단지 사양 일 뿐이며 시장에는 JPA를 구현하는 많은 공급 업체가 있습니다. 다른 유형의 공급 업체가 다른 방식으로 JPA를 구현합니다. 서로 다른 유형의 공급 업체가 다른 기능을 제공하므로 요구 사항에 따라 적절한 공급 업체를 선택하십시오.

JPA 대신 Hibernate 또는 다른 공급 업체를 사용하는 경우 EclipseLink로 Hibernate로 쉽게 이동할 수 없으며 OpenJPA를 Hibernate로 쉽게 이동할 수는 없지만 JPA를 사용하는 경우 지속성 XML 파일을 제공하기 만하면됩니다. JPA.


4

JPA는 Hibernate가 구현하는 API이다. Hibernate는 JPA보다 먼저 존재한다. JPA 전에 ORM을 수행하기위한 기본 최대 절전 모드 코드를 작성하십시오. JPA는 인터페이스 일 뿐이므로 이제 JPA 코드를 작성하고 구현을 찾아야합니다. 최대 절전 모드는 구현입니다.

최대 절전 모드, Toplink 등 ...

JPA의 장점은 필요한 경우 구현을 교체 할 수 있다는 것입니다. 단점은 native hibernate / toplink / etc ... API가 JPA 사양이 지원하지 않는 기능을 제공 할 수 있다는 것입니다.


4

JPA는 사양이지만 Hibernate는 사양에 명시된 규칙을 따르는 구현 공급자입니다.


3

Java-독립성은 운영 체제뿐만 아니라 공급 업체에서도 독립적입니다.

따라서, 당신은 해야 다른 응용 프로그램 서버에서 응용 프로그램을 배포 할 수. JPA는 모든 Java EE 호환 응용 프로그램 서버에서 구현되며 응용 프로그램 서버를 교체 할 수 있지만 구현도 변경됩니다. 최대 절전 모드 응용 프로그램 다른 응용 프로그램 서버에 더 쉽게 배포 할 수 있습니다 .


3

JPA는 DB 작업, OR 매핑 및 기타 필요한 작업을 수행하기 위해 데이터 계층에서 구현하는 사양입니다.

그것은 단지 사양 이기 때문에 , 당신은 그것을 구현하는 도구가 필요합니다. 해당 도구는 최대 절전 모드, TopLink, iBatis, 스프링 데이터 등일 수 있습니다.

데이터 계층에서 최대 절전 모드를 사용하는 경우 반드시 JPA가 필요하지 않습니다. 그러나 Hibernate에 JPA 사양을 사용하는 경우 사양이 다른 기기에도 공통적이기 때문에 향후 TopLink iBatis와 같은 다른 ORM 도구로 쉽게 전환 할 수 있습니다.

* ( 기억하는 import javax.persistence.*;경우 Hibernate에서 OR 맵핑에 대한 주석 (예 : @Id, @Column, @GeneratedValue 등)을 사용할 때 수행합니다. Hibernate에서 JPA를 사용하는 곳에서는 JPA의 @Query 및 기타 기능을 다음과 같이 사용할 수 있습니다. 잘 )


2

JPA는 Java 플랫폼을 사용하는 응용 프로그램에서 관계형 데이터 관리를 설명하는 Java API 사양입니다. 여기서 최대 절전 모드는 JPA 사양을 따르는 ORM (Object Relational Mapping) 라이브러리입니다.

JPA는 Hibernate에 의해 구현되는 일련의 규칙으로 생각할 수 있습니다.


2

JPA는 구현을위한 특정 코드가없는 객체 관계형 매핑을 구현하기위한 Java 사양 요구 사항 인 JSR입니다. EJB는 Java 객체와 관계형 데이터베이스 간의 데이터 액세스, 유지 및 관리를위한 특정 규칙 세트를 정의합니다. 소개와 함께 EJB는 Java 개발자 커뮤니티에서 무거운 것으로 비판 받아 대체되었습니다. Hibernate는 테 가이드 라인을 사용하여 JPA를 구현할 수있는 방법 중 하나입니다. Hibernate는 고성능 Object / Relational Persistence 및 Query Service이며 오픈 소스 GNU LGPL (General Public License)에 따라 라이센스가 부여됩니다. JPA 사양의 다른 구현을 위해 Hibernate의 JPA 구현을 바꿀 수 있습니다.


1

JPA는 구체적인 구현이 필요한 사양 일뿐입니다. 오라클이 제공하는 기본 구현은 "Eclipselink"입니다. Oracle은 Eclipse에 Toplink를 기증하여 eclipselink와 통합했습니다.

Eclipselink를 사용하면 필요한 경우 코드를 모든 구현에 이식 할 수 있습니다. Hibernate는 또한 완전한 JPA 구현 + MORE입니다. Hibernate는 추가적인 Hibernate 고유의 기능을 가진 JPA의 슈퍼 세트입니다. 따라서 Hibernate에서 개발 된 애플리케이션은 다른 구현으로 전환 될 때 호환되지 않을 수 있습니다. 여전히 최대 절전 모드는 JPA 구현 및 널리 사용되는 대다수 개발자의 선택입니다.

또 다른 JPA 구현은 OpenJPA이며 Kodo 구현의 확장입니다.

JPA 대 최대 절전 모드


1

나는 매우 쉬운 말로 설명하려고 노력합니다.

우리 모두가 MERCEDES, BMW, AUDI 등과 같은 여러 A 클래스 제조업체임을 알고 자동차가 필요하다고 가정하십시오.

이제 위의 진술에서 모든 자동차는 4 개의 바퀴가있는 것과 같은 공통 기능을 가지고 있으며 도로에서 주행 할 수있는 자동차입니다 ... JPA와 같습니다. 그리고 MERCEDES, BMW, AUDI 등은 공통 자동차 기능을 사용하고 고객 기반에 따라 기능을 추가하여 최대 절전 모드, iBATIS 등과 같은 자동차 사양을 구현하고 있습니다.

따라서이 공통 기능으로 jpa로 이동하고 최대 절전 모드는 jboss 요구에 따라 구현입니다.

1 개 더

JPA에는 몇 가지 기본 속성이 포함되어 있으므로 나중에 다른 구현으로 최대 절전 모드를 변경하려는 경우 많은 두통없이 쉽게 전환 할 수 있으며 이러한 기본 속성에는 모든 구현 기술, JPQL 쿼리에 사용할 수있는 JPA 주석이 포함됩니다.

따라서 주로 클라이언트 요구에 따라 구현을 전환하려는 경우를 위해 JPA 유형 기술로 최대 절전 모드를 구현하고 일부 공통 기능이 JPA에 관련되어 있으므로 코드를 적게 작성합니다. 누군가가 여전히 명확하지 않으면 스택 오버플로에서 새로운 메신저로 주석을 달 수 있습니다.

감사합니다


조언을 주셔서 감사합니다
rajiv baghel

0

JPA는 단지 사양이지만 Hibernate는 JPA 공급자 중 하나입니다. 즉, hibernate는 JPA 계약에 언급 된 다양한 것들을 구현하고 있습니다.


0

JPA 또는 Java Persistence API는 ORM 구현에 대한 표준 사양이며 Hibernate는 실제 ORM 구현 또는 프레임 워크입니다.


-1

JPA는 Java Persistence API입니다. API의 스펙 만 지정합니다. API 작성을위한 규칙 및 지침 세트를 의미합니다. 다른 맥락에서 말하면, API를 만들기위한 래퍼를 제공하는 표준 세트는 데이터베이스에서 엔티티 객체에 액세스하는 데 사용할 수 있습니다. JPA는 oracle에서 제공합니다. 데이터베이스 액세스를 수행하려면 구현이 필요합니다. JPA는 API 구현을위한 지침 만 지정합니다. Hibernate는 해당 API 구현을 담당하는 JPA 제공 업체 / 공급 업체입니다. Hibernate TopLink 및 Open JPA와 같이 JPA API 제공자의 예가 있습니다. 따라서 최대 절전 모드를 통해 JPA 지정 표준 API를 사용합니다.


-2

비 유적으로 말하면 JPA는 인터페이스, Hibernate / TopLink 클래스 (즉, 인터페이스 구현) 일뿐입니다.

인터페이스를 사용하려면 인터페이스 구현이 있어야합니다. 그러나 인터페이스를 통해 클래스를 사용할 수 있습니다 (예 : JPA API를 통해 Hibernate 사용). 또는 직접 JPA API를 통하지 않고 직접 Hibernate를 사용하여 구현을 사용할 수 있습니다.

JPA에 대한 좋은 책은 Vlad Mihalcea의 "고성능 Java Persistence"입니다.

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