Sự khác biệt giữa JPA và Hibernate là gì? [đóng cửa]


680

Tôi hiểu rằng JPA 2 là một đặc điểm kỹ thuật và Hibernate là một công cụ cho ORM. Ngoài ra, tôi hiểu rằng Hibernate có nhiều tính năng hơn JPA 2. Nhưng từ quan điểm thực tế, sự khác biệt thực sự là gì?

Tôi có kinh nghiệm sử dụng iBatis và hiện tại tôi đang cố gắng học Hibernate hoặc JPA2. Tôi đã chọn cuốn sách Pro JPA2 và nó liên tục đề cập đến "nhà cung cấp JPA". Ví dụ:

Nếu bạn nghĩ rằng một tính năng nên được tiêu chuẩn hóa, bạn nên lên tiếng và yêu cầu nó từ nhà cung cấp JPA của bạn

Điều này làm tôi bối rối vì vậy tôi có một vài câu hỏi:

  • Chỉ sử dụng JPA2 tôi có thể tìm nạp dữ liệu từ DB bằng cách chú thích POJO của tôi
  • JPA2 có được sử dụng với "Nhà cung cấp JPA" hay không, ví dụ TopLink hoặc Hibernate? Nếu vậy, lợi ích của việc sử dụng JPA2 + Hibernate so với JPA2 là gì, hoặc so với Hibernate một mình?
  • Bạn có thể giới thiệu một cuốn sách JPA2 thực tế tốt. "Pro JPA2" có vẻ giống như một cuốn kinh thánh và tài liệu tham khảo về JPA2 (Nó không đi vào Truy vấn cho đến nửa sau của cuốn sách). Có một cuốn sách có cách tiếp cận vấn đề / giải pháp cho JPA2 không?

2
Câu hỏi về sự khác biệt giữa JPA và Hibernate phạm lỗi là không chính xác. Trận Hibernate vs JPA là vô nghĩa. Bạn nên sử dụng bất kỳ triển khai JPA nào với API JPA để tránh triển khai ORM khác nhau.
BERGUIGA Mohamed Amine 4/214

18
@ Berguiga.MComine, Nếu chúng ta đã biết rằng câu hỏi trên là không chính xác. Chúng tôi không cần hỏi nữa. Tôi cũng quan tâm đến chủ đề này.
Đỗ Như Vy

Tôi có một sự nhầm lẫn với JpaTemplate được sử dụng vào mùa xuân "org.springframework.orm.jpa.JpaTemplate" nó có các chức năng riêng của mình như vẫn tồn tại (), find (), merge (), v.v ... làm thế nào mọi thứ hoạt động mà không ngủ đông?
nitin verma

@nitinverma: Đó thực sự là một câu hỏi riêng biệt. Nếu bạn vẫn cần một câu trả lời, tôi khuyên bạn nên hỏi riêng câu hỏi của mình để thu hút thêm phản hồi.
Wouter

Câu trả lời:


776

Như bạn nêu JPA chỉ là một đặc điểm kỹ thuật, có nghĩa là không có triển khai. Bạn có thể chú thích các lớp của mình nhiều như bạn muốn với các chú thích JPA, tuy nhiên nếu không có triển khai thì sẽ không có gì xảy ra. Hãy nghĩ về JPA như các hướng dẫn phải được tuân theo hoặc một giao diện, trong khi triển khai JPA của Hibernate là mã đáp ứng API như được xác định bởi đặc tả JPA và cung cấp chức năng của trình duyệt.

Khi bạn sử dụng Hibernate với JPA, bạn thực sự đang sử dụng triển khai JPA Hibernate. Lợi ích của việc này là bạn có thể trao đổi việc triển khai JPA của Hibernate để thực hiện một đặc điểm kỹ thuật khác của JPA. Khi bạn sử dụng Hibernate thẳng, bạn đang khóa thực hiện vì các ORM khác có thể sử dụng các phương thức / cấu hình và chú thích khác nhau, do đó bạn không thể chuyển sang ORM khác.

Đối với một mô tả chi tiết hơn đọc mục blog của tôi .


5
Vì vậy, khi bạn đang sử dụng Hibernate với JPA, các chú thích {java.persistence} sẽ hoạt động hoặc bạn sẽ phải sử dụng các chú thích {org.hibernate}?
Amruta

62
Tôi chỉ muốn thêm rằng việc thay thế một ORM bằng một ORM khác là một dịp rất hiếm, vì vậy bạn có thể sẽ không bao giờ nhận được lợi ích này khi sử dụng JPA. Những gì bạn đạt được với JPA là một giao thức, tiêu chuẩn, đặt tên và các quy ước khác mà bạn có thể sử dụng để giao tiếp với người khác.
dậy thì

3
@pubsy Tôi đồng ý, nhưng về nguyên tắc đó là một trong những điểm bán hàng của một đặc điểm kỹ thuật.
Kevin Bowersox

6
@Amruta để trả lời câu hỏi của bạn, khi một người đang sử dụng Hibernate với JPA, các chú thích {java.persistence} sẽ hoạt động và không cần sử dụng các chú thích {org.hibernate}.
Học viên

3
@JavaGeek đúng như vậy, miễn là mã của một người chỉ sử dụng giao diện được đề cập trong JPA. Nếu một người sử dụng các tính năng dành riêng cho ngủ đông thì họ phải sử dụng org.hibernatechú thích. thêm về điều này
Suryavanshi

632

JPA là điệu nhảy, Hibernate là vũ công.


189
JPA là Nghệ thuật, Hibernate là nghệ sĩ.
May mắn

10
Tôi thích khiếu hài hước này :) JPA là một đạo diễn, Hibernate là một diễn viên.
dùng3278897

7
nhưng, Dancer (Hibernate) có thể biểu diễn mà không cần nhảy (JPA) phải không: /
RevanthKrishnaKumar V.

3
Câu trả lời này không giải thích bất cứ điều gì, chỉ là một câu nói mơ hồ.
Amir Kost

11
Ẩn dụ này không thêm sự hiểu biết. Nếu bạn đã biết sự khác biệt, bạn sẽ thấy điều đó thật đáng kinh ngạc. Nếu bạn không biết sự khác biệt, bạn vẫn sẽ không biết điều đó.
Nick Volynkin

158

Một số điều quá khó hiểu nếu không có quan điểm lịch sử về ngôn ngữ và sự hiểu biết về JCP.

Thường có các bên thứ ba phát triển các gói thực hiện chức năng hoặc lấp đầy một khoảng trống không phải là một phần của JDK chính thức. Vì nhiều lý do, chức năng đó có thể trở thành một phần của JDK Java thông qua JCP (Quy trình cộng đồng Java)

Hibernate (vào năm 2003) đã cung cấp một cách để SQL trừu tượng và cho phép các nhà phát triển suy nghĩ nhiều hơn về các đối tượng vẫn tồn tại (ORM). Bạn thông báo ngủ đông về các đối tượng Thực thể của mình và nó tự động tạo chiến lược để duy trì chúng. Hibernate đã cung cấp một triển khai để thực hiện điều này và API để thúc đẩy việc triển khai thông qua cấu hình hoặc chú thích XML.

Vấn đề cơ bản bây giờ là mã của bạn trở nên kết hợp chặt chẽ với một nhà cung cấp cụ thể (Hibernate) cho những gì nhiều người nghĩ nên chung chung hơn. Do đó cần một API kiên trì chung.

Trong khi đó, JCP với rất nhiều đầu vào từ Hibernate và các nhà cung cấp công cụ ORM khác đang phát triển JSR 220 (Yêu cầu đặc tả Java) dẫn đến JPA 1.0 (2006) và cuối cùng là JSR 317 là JPA 2.0 (2009). Đây là các thông số kỹ thuật của API Persistence Java chung. API được cung cấp trong JDK dưới dạng một tập các giao diện để các lớp của bạn có thể phụ thuộc vào javax.persistence và không lo lắng về nhà cung cấp cụ thể đang thực hiện công việc duy trì các đối tượng của bạn. Đây chỉ là API và không phải là việc thực hiện. Hibernate giờ trở thành một trong nhiều nhà cung cấp triển khai đặc tả JPA 2.0. Bạn có thể viết mã cho JPA và chọn bất kỳ nhà cung cấp ORM nào phù hợp với nhu cầu của bạn.

Có những trường hợp Hibernate có thể cung cấp cho bạn các tính năng không được mã hóa trong JPA. Trong trường hợp này, bạn có thể chọn chèn một chú thích cụ thể Hibernate trực tiếp vào lớp của mình vì JPA không cung cấp giao diện để thực hiện điều đó.

Nguồn: http://www.reddit.com/r/java/comments/16ovek/under Hiểu_when_to_use_jpa_vs_hibernate /


2
Phần lịch sử tốt. trong khi các câu trả lời khác chỉ là lặp lại những gì trong câu hỏi.
Robert

1
Cảm ơn vì những điều kiện giác ngộ. Bạn nói rằng JPA đã được thực hiện bởi vì các ứng dụng được kết hợp chặt chẽ với Hibernate, đó là một nhu cầu trừu tượng, ok. Nhưng nó không phải là một vấn đề vô hạn? Thay vào đó, hiện tại ứng dụng có được kết hợp chặt chẽ với JPA không? Lợi ích thực sự ở đây là gì? Tôi đã thấy Hibernate như một lớp trừu tượng ...
Aphax

4
@Aphax Chắc chắn, và khi bạn mã hóa các tệp .java, bạn cũng được liên kết chặt chẽ với Java, vậy nếu tôi muốn chuyển sang Python vào ngày mai thì sao?
Smutje

100

JPA là giao diện trong khi Hibernate là triển khai.

Theo truyền thống, đã có nhiều giải pháp ORM Java:

mỗi triển khai xác định định nghĩa ánh xạ hoặc API khách hàng của riêng nó. Nhóm chuyên gia JPA đã tập hợp những công cụ tốt nhất trong số các công cụ này và vì vậy họ đã tạo ra tiêu chuẩn API liên tục Java.

API duy trì tiêu chuẩn rất thuận tiện theo quan điểm của khách hàng, giúp việc chuyển đổi một triển khai với một cách tương đối dễ dàng (mặc dù trong thực tế, điều đó không đơn giản vì dù sao trong các dự án lớn, bạn sẽ phải sử dụng các tính năng không chuẩn cụ thể) .

JPA tiêu chuẩn đã đẩy cạnh tranh Java ORM lên một tầm cao mới và điều này chỉ có thể dẫn đến việc triển khai tốt hơn.

Như đã giải thích trong cuốn sách của tôi, Tính bền vững của Java hiệu suất cao , Hibernate cung cấp các tính năng chưa được JPA hỗ trợ :

Các tính năng bổ sung này cho phép Hibernate giải quyết nhiều yêu cầu bền bỉ được yêu cầu bởi các ứng dụng doanh nghiệp lớn.


Đây là một điều tốt, tôi không biết về các công cụ ORM khác trước đó
Avdhut

Câu trả lời tuyệt vời và tôi đang thưởng thức cuốn sách rất nhiều! Cảm ơn đã phát hành nó!
JonasJSchreiber

Cảm ơn bạn đã thưởng thức cuốn sách Java Persistence hiệu suất cao của tôi .
Vlad Mihalcea

Đây ~ JPA là giao diện trong khi Hibernate là triển khai
Eddie B

57

Từ Wiki .

Động lực để tạo API liên tục Java

Nhiều nhà phát triển Java doanh nghiệp sử dụng các đối tượng liên tục nhẹ được cung cấp bởi các khung công tác nguồn mở hoặc Đối tượng truy cập dữ liệu thay vì các thực thể: đậu thực thể và đậu doanh nghiệp có tiếng là quá nặng và phức tạp và người ta chỉ có thể sử dụng chúng trong các máy chủ ứng dụng Java EE. Nhiều tính năng của các khung bền vững của bên thứ ba đã được tích hợp vào API tính bền vững của Java và cho đến năm 2006, các dự án như Hibernate (phiên bản 3.2) và TopLink Essentials phiên bản nguồn mở đã trở thành triển khai API liên tục của Java.

Như đã nói trong trang JCP , liên kết Eclipse là Triển khai tham chiếu cho JPA. Hãy nhìn vào câu trả lời này để biết thêm một chút về điều này.

Bản thân JPA có các tính năng sẽ bù cho khung ORM tiêu chuẩn. Vì JPA là một phần của đặc tả Java EE, bạn có thể sử dụng JPA một mình trong một dự án và nó sẽ hoạt động với bất kỳ Máy chủ tương thích Java EE nào . Có, các máy chủ này sẽ có các triển khai cho thông số JPA.

Hibernate là khung ORM phổ biến nhất , một khi JPA được giới thiệu ngủ đông phù hợp với thông số kỹ thuật của JPA . Ngoài các đặc tả cơ bản mà nó nên theo hibernate cung cấp toàn bộ rất nhiều thứ bổ sung.


3
Điều đó nói rằng bạn có thể sử dụng JPA một mình trong một dự án. ?? Bạn có nghĩa là không sử dụng Hibernate, TopLink hoặc bất kỳ triển khai JPA nào khác?
abbas

2
@ thỏ có. Thông số kỹ thuật Java EE chỉ sử dụng JPA. Nếu bạn thêm ngủ đông, nó cung cấp một số tính năng bổ sung.
ManuPK

1
Tôi nghe nói JPA chỉ là một giao diện / đặc điểm kỹ thuật. Nếu chúng ta sử dụng JPA một mình trong một dự án thì nó sẽ được thực hiện ở đâu?
abbas

@abbas cảm ơn vì nhận xét. Tôi đã thêm chi tiết trong câu trả lời. Hi vọng điêu nay co ich.
ManuPK

1
@Forhad Luôn cần phải có một triển khai, cho dù nó có bị chôn vùi trong một số kiến ​​trúc máy chủ hay không không quan trọng, không có cách nào để tải xuống một số thư viện JPA và để nó thực hiện kiên trì cho bạn.
Kevin Bowersox

15

JPA chỉ là một đặc điểm kỹ thuật cần thực hiện cụ thể. Các mặc định thực hiện oracle cung cấp là "EclipseLink" bây giờ. (Toplink được Oracle tặng cho nền tảng Eclipse để hợp nhất với eclipselink)

(Tham khảo: http://www.oracle.com/technetwork/middleware/toplink/index-085257.html http://www.eclipse.org/org/press-release/20080417_Eclipselink.php )

Sử dụng Eclipselink, người ta có thể chắc chắn rằng mã có thể mang theo để thực hiện nếu có nhu cầu. Hibernate cũng là một triển khai JPA đầy đủ + THÊM (Sắp xếp JPA Plus). Hibernate là bộ siêu JPA với một số chức năng cụ thể của Hibernate. Vì vậy, ứng dụng được phát triển trong Hibernate có thể không tương thích khi chuyển sang triển khai khác. Still hibernate là sự lựa chọn của phần lớn các nhà phát triển khi triển khai JPA và được sử dụng rộng rãi.

Một triển khai JPA khác là OpenJPA (openjpa.apache.org) là một phần mở rộng của việc triển khai Kodo.


15

JPA: giống như một giao diện và không có triển khai cụ thể để sử dụng các chức năng có trong JPA.

Hibernate: chỉ là Nhà cung cấp JPA có triển khai các chức năng trong JPA và có thể có một số chức năng bổ sung có thể không có trong JPA.

MIPO: bạn có thể sử dụng

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

Combo 1 : được sử dụng khi bạn cảm thấy rằng chế độ ngủ đông của bạn không mang lại hiệu suất tốt hơn và muốn thay đổi Nhà cung cấp JPA mà bạn không phải viết JPA một lần nữa. Bạn có thể viết một Nhà cung cấp JPA khác ... và có thể thay đổi nhiều lần bạn có thể.

Combo 2 : được sử dụng rất ít vì khi bạn không thay đổi Nhà cung cấp JPA của mình bằng bất cứ giá nào.

Truy cập http://blog-toth think.rhcloud.com//post/2 , nơi sự nhầm lẫn hoàn toàn của bạn sẽ được giải tỏa.


11

JPA là giao diện, Hibernate là một trong những triển khai của giao diện đó.


2
và trên hết Hibernate thêm một số tính năng / phương pháp.
rai.skumar

10

JPA là một đặc điểm kỹ thuật để chuẩn hóa các ORM-API. Hibernate là một nhà cung cấp thực hiện JPA. Vì vậy, nếu bạn sử dụng JPA với hibernate, bạn có thể sử dụng API JPA tiêu chuẩn, hibernate sẽ nằm dưới mui xe, cung cấp thêm một số chức năng phi tiêu chuẩn. Xem http://docs.jboss.org/hibernate/urdy/entitymanager/reference/en/html_single/http://docs.jboss.org/hibernate/urdy/annotations/reference/en/html_single/


5

JPA chỉ là một đặc điểm kỹ thuật. Trên thị trường có nhiều nhà cung cấp thực hiện JPA. Các loại nhà cung cấp khác nhau thực hiện JPA theo cách khác nhau. Vì vậy, các loại nhà cung cấp khác nhau cung cấp chức năng khác nhau, vì vậy hãy chọn nhà cung cấp phù hợp dựa trên yêu cầu của bạn.

Nếu bạn đang sử dụng Hibernate hoặc bất kỳ nhà cung cấp nào khác thay vì JPA, bạn không thể dễ dàng chuyển sang ngủ đông sang EclipseLink hoặc OpenJPA sang Hibernate. Nhưng nếu bạn sử dụng JPA hơn bạn chỉ cần thay đổi cung cấp tệp XML bền bỉ. JPA.


4

JPA là một API, một API mà Hibernate thực hiện. Hibernate có trước JPA. Trước JPA, bạn viết mã ngủ đông riêng để thực hiện ORM của mình. JPA chỉ là giao diện, vì vậy bây giờ bạn viết mã JPA và bạn cần tìm một triển khai. Hibernate xảy ra là một thực hiện.

Vì vậy, lựa chọn của bạn là thế này: ngủ đông, toplink, v.v ...

Lợi thế của JPA là nó cho phép bạn trao đổi việc thực hiện nếu cần. Nhược điểm là API ngủ đông / toplink / etc ... API có thể cung cấp chức năng mà đặc tả JPA không hỗ trợ.


4

Trong khi JPA là đặc tả, Hibernate là nhà cung cấp triển khai tuân theo các quy tắc được quy định trong đặc tả.


3

Java - tính độc lập của nó không chỉ từ hệ điều hành, mà còn từ nhà cung cấp.

Do đó, bạn sẽ có thể triển khai ứng dụng của mình trên các máy chủ ứng dụng khác nhau. JPA được triển khai trong bất kỳ máy chủ ứng dụng tuân thủ Java EE nào và nó cho phép trao đổi các máy chủ ứng dụng, nhưng sau đó việc triển khai cũng thay đổi. Một ứng dụng Hibernate có thể dễ dàng triển khai hơn trên một máy chủ ứng dụng khác.


3

JPA là một đặc tả mà bạn triển khai trong lớp dữ liệu của mình để thực hiện các thao tác db, ánh xạ HOẶC các tác vụ cần thiết khác.

Vì nó chỉ là một đặc điểm kỹ thuật , bạn cần một công cụ để thực hiện nó. Công cụ đó có thể là Hibernate, TopLink, iBatis, spring-data, v.v.

Bạn không nhất thiết phải yêu cầu JPA nếu bạn đang sử dụng Hibernate trong Lớp dữ liệu của mình. Nhưng nếu bạn sử dụng đặc tả JPA cho Hibernate, thì nó sẽ giúp chuyển sang các công cụ ORM khác như iBatis, TopLink dễ dàng trong tương lai, vì đặc điểm kỹ thuật này cũng phổ biến đối với những người khác.

* ( nếu bạn nhớ, bạn làm import javax.persistence.*;khi bạn sử dụng các chú thích cho ánh xạ OR (như @Id, @Column, @GeneratedValue, v.v.) trong Hibernate, đó là nơi bạn đang sử dụng JPA trong Hibernate, bạn có thể sử dụng @Query của JPA và các tính năng khác như tốt )


2

JPA là một đặc tả API Java mô tả việc quản lý dữ liệu quan hệ trong các ứng dụng sử dụng Nền tảng Java. trong đó Hibernate là một thư viện ORM (Ánh xạ quan hệ đối tượng) theo đặc tả của JPA.

Bạn có thể nghĩ JPA là một bộ Quy tắc được Hibernate triển khai.


2

JPA là JSR tức là Yêu cầu Đặc tả Java để triển khai Ánh xạ quan hệ đối tượng không có mã cụ thể để triển khai. Nó định nghĩa một bộ quy tắc nhất định để truy cập, lưu giữ và quản lý dữ liệu giữa các đối tượng Java và cơ sở dữ liệu quan hệ Với sự giới thiệu của nó, EJB đã bị thay thế vì bị cộng đồng nhà phát triển Java chỉ trích là nặng nề. Hibernate là một trong những cách mà JPA có thể được triển khai bằng cách sử dụng các hướng dẫn te. Hibernate là một dịch vụ truy vấn và duy trì quan hệ / đối tượng hiệu suất cao được cấp phép theo Giấy phép công cộng GNU Lesser General License (LGPL). có thể trao đổi việc triển khai JPA của Hibernate để thực hiện một đặc điểm kỹ thuật khác của JPA.


1

JPA chỉ là một đặc điểm kỹ thuật cần thực hiện cụ thể. Việc triển khai mặc định được cung cấp bởi oracle là "Eclipselink". Toplink được Oracle tặng cho nền tảng Eclipse để hợp nhất với eclipselink.

Sử dụng Eclipselink, người ta có thể chắc chắn rằng mã có thể mang theo để thực hiện nếu có nhu cầu. Hibernate cũng là một triển khai JPA đầy đủ + THÊM. Hibernate là bộ siêu JPA với một số chức năng cụ thể của Hibernate. Vì vậy, ứng dụng được phát triển trong Hibernate có thể không tương thích khi chuyển sang triển khai khác. Still hibernate là sự lựa chọn của phần lớn các nhà phát triển khi triển khai JPA và được sử dụng rộng rãi.

Một triển khai JPA khác là OpenJPA, đây là một phần mở rộng của việc triển khai Kodo.

JPA vs Hibernate


1

Tôi cố gắng giải thích bằng những từ rất dễ dàng.

Giả sử bạn cần một chiếc xe vì tất cả chúng ta đều biết họ là một số nhà sản xuất hạng A như MERCEDES, BMW, AUDI, v.v.

Bây giờ trong tuyên bố trên CAR (là một đặc điểm kỹ thuật) vì mọi chiếc xe đều có các tính năng phổ biến như đồ vật với 4 bánh và có thể được lái trên đường là xe hơi ... vì vậy nó giống như JPA. Và MERCEDES, BMW, AUDI, v.v ... chỉ sử dụng tính năng phổ biến của xe hơi và thêm chức năng theo cơ sở khách hàng của họ để họ triển khai các đặc điểm kỹ thuật của xe như hibernate, iBATIS, v.v.

Vì vậy, bởi các tính năng phổ biến này đi đến jpa và hibernate chỉ là một triển khai theo nhu cầu jboss của họ.

1 điều nữa

JPA bao gồm một số thuộc tính cơ bản vì vậy trong tương lai nếu bạn muốn thay đổi chế độ ngủ đông sang bất kỳ triển khai nào khác, bạn có thể dễ dàng chuyển đổi mà không phải đau đầu và đối với các thuộc tính cơ bản đó bao gồm các chú thích JPA có thể hoạt động cho mọi công nghệ triển khai, truy vấn JPQL.

Vì vậy, chủ yếu chúng tôi triển khai ngủ đông với công nghệ loại JPA chỉ trong trường hợp chúng tôi muốn chuyển đổi triển khai theo nhu cầu của khách hàng cộng với bạn sẽ viết ít mã hơn vì một số tính năng phổ biến có liên quan đến JPA. Nếu ai đó vẫn chưa rõ thì bạn có thể nhận xét là tôi mới trên stack overflow.

Cảm ơn bạn


Cảm ơn vì lời khuyên
rajiv baghel

0

JPA chỉ là một đặc điểm kỹ thuật trong khi Hibernate là một trong những nhà cung cấp JPA, tức là hibernate đang triển khai nhiều thứ được đề cập trong hợp đồng JPA.


0

API bền vững của JPA hoặc Java là một đặc tả tiêu chuẩn cho các triển khai ORM trong khi Hibernate là khung hoặc triển khai ORM thực tế.


-1

JPA là API liên tục Java. Mà Chỉ định các thông số kỹ thuật cho API. Có nghĩa là tập hợp các quy tắc và hướng dẫn để tạo API. Nếu nói một bối cảnh khác, Nó là tập hợp các tiêu chuẩn cung cấp trình bao bọc để tạo các API đó, có thể được sử dụng để truy cập đối tượng thực thể từ cơ sở dữ liệu. JPA được cung cấp bởi oracle. Khi chúng tôi sẽ truy cập cơ sở dữ liệu, chúng tôi chắc chắn cần triển khai. Có nghĩa là JPA chỉ định các hướng dẫn để triển khai API. Hibernate là nhà cung cấp / Nhà cung cấp JPA chịu trách nhiệm triển khai các API đó. Giống như Hibernate TopLink và Open JPA là một số ví dụ về các nhà cung cấp API JPA. Vì vậy, chúng tôi sử dụng API tiêu chuẩn do JPA chỉ định thông qua chế độ ngủ đông.


-2

Nói một cách hình tượng, JPA chỉ là giao diện, Hibernate / TopLink - class (tức là thực hiện giao diện).

Bạn phải thực hiện giao diện để sử dụng giao diện. Nhưng bạn có thể sử dụng lớp thông qua giao diện, tức là Sử dụng Hibernate thông qua API JPA hoặc bạn có thể sử dụng triển khai trực tiếp, tức là sử dụng Hibernate trực tiếp, không thông qua API JPA thuần túy.

Cuốn sách hay về JPA là "Sự kiên trì Java hiệu suất cao" của Vlad Mihalcea.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.