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

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에 대한 문제 / 해결 방법을 다루는 책이 있습니까?


답변

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

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

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


답변

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


답변

언어에 대한 역사적 관점과 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/


답변

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

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

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

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

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

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

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


답변

로부터 위키 .

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의 사양. 최대 절전 모드를 따라야한다는 기본 사양 외에도 많은 추가 기능이 제공됩니다.


답변

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


답변

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를 방문 하면 혼동이 확실해집니다.