Sự khác biệt giữa JPA và Spring Data JPA là gì?


144

Tôi hơi bối rối về sự khác biệt giữa Spring Data-JPA và JPA. Tôi biết về JPA rằng đây là một đặc tả để duy trì các Đối tượng Java cho cơ sở dữ liệu quan hệ bằng cách sử dụng công nghệ ORM phổ biến.

Nói cách khác, JPA cung cấp giao diện và các công nghệ ORM khác, thực hiện các giao diện được gọi là nhà cung cấp JPA, ví dụ như Hibernate.

Bây giờ, chính xác Spring Data JPA là gì?

Có phải Spring Data JPA đã thêm một số chức năng (Giao diện) so với JPA và nó vẫn chỉ được chỉ định hay nó cũng là nhà cung cấp JPA?

Tôi thấy Spring Data JPA hoạt động xung quanh các kho lưu trữ (lớp DAO: nếu tôi không sai). Vì vậy, ý tôi là, nó khác nhau như thế nào khi sử dụng 'Spring Data JPA + Hibernate' hoặc chỉ sử dụng chỉ đạo 'Hibernate'?

Câu trả lời:


126

Tôi thấy Spring, JPA hoạt động xung quanh các kho lưu trữ (lớp DAO: nếu tôi không sai). Vậy ý tôi là nó khác nhau như thế nào khi sử dụng 'Spring JPA + Hibernate' hoặc chỉ sử dụng trực tiếp 'Hibernate'?

Như bạn đã nói, JPA là một đặc tả trong khi Hibernate là một triển khai cụ thể của đặc tả đó (các triển khai này thường được gọi là Nhà cung cấp ). Bằng cách sử dụng Hibernate, bạn tự ràng buộc mình với nhà cung cấp đó hạn chế quyền tự do chuyển sang tùy chọn khác khi được yêu cầu (ví dụ: bạn muốn sử dụng EclipseLink hoặc ObjectDB thay vì Hibernate có lỗi làm dừng quá trình phát triển của bạn).

Trích dẫn mùa xuân dữ liệu JPA của tài liệu:

Việc triển khai một lớp truy cập dữ liệu của một ứng dụng đã khá phức tạp trong một thời gian. Quá nhiều mã soạn sẵn phải được viết. Các lớp miền bị thiếu máu và chưa được thiết kế theo cách hướng đối tượng hoặc hướng theo đối tượng thực.

Sử dụng cả hai công nghệ này giúp cuộc sống của các nhà phát triển dễ dàng hơn rất nhiều về sự bền bỉ của mô hình miền. Tuy nhiên, số lượng mã soạn sẵn để thực hiện các kho lưu trữ, đặc biệt vẫn còn khá cao. Vì vậy, mục tiêu của việc trừu tượng hóa kho lưu trữ của Spring Data là giảm nỗ lực triển khai các lớp truy cập dữ liệu cho các cửa hàng lưu trữ lâu dài khác nhau một cách đáng kể.

Tóm lại, nó nằm trên JPA thêm một lớp trừu tượng khác, loại xác định một thiết kế dựa trên tiêu chuẩn để hỗ trợ Lớp bền bỉ trong bối cảnh Mùa xuân. Các giao diện được xác định (được biết đến với Spring) cung cấp các dịch vụ mà khung xử lý bằng cách sử dụng JPA để phục vụ kết quả. Bạn xác định một kho lưu trữ theo cách Spring có thể quét dự án và tìm thấy nó:

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

Do đó, cho phép bạn sử dụng nó trong bối cảnh của một container hoặc bên ngoài nó.

Bây giờ chính xác là mùa xuân, JPA. Là Spring, JPA đã thêm một số chức năng (Giao diện) so với JPA và vẫn chỉ được chỉ định hoặc nó cũng là nhà cung cấp JPA?

Spring Data JPA cung cấp một định nghĩa để triển khai các kho lưu trữ được hỗ trợ dưới mui xe bằng cách tham khảo đặc tả JPA, sử dụng nhà cung cấp mà bạn xác định.


1
Tôi có thể gọi Kho lưu trữ là tập hợp các thực thể mà Spring quản lý không? Tôi không biết tại sao nhưng Spring JPA hỗ trợ sử dụng kho lưu trữ có vẻ rất giống với EntityManager của EJB - đó có phải là suy nghĩ đúng đắn hay chúng hoàn toàn khác nhau trong mục đích của họ? Cảm ơn trước. Mù tạt.
Mustafa

1
@Mustafa Hầu hết các giải pháp đều có căn cứ chung. Mục tiêu có thể giống nhau, việc thực hiện là khác nhau do các giao diện liên quan.
Fritz

35

API liên tục Java, đôi khi được gọi là JPA, là một khung công tác Java quản lý dữ liệu quan hệ trong các ứng dụng sử dụng Nền tảng Java, Phiên bản tiêu chuẩn (JavaSE) và Nền tảng Java, Phiên bản doanh nghiệp (JavaEE).

Sự kiên trì trong bối cảnh này bao gồm ba lĩnh vực:

  • Bản thân API, được xác định trong javax.persistencegói.

  • Ngôn ngữ truy vấn bền vững Java (JPQL).

  • Đối tượng - Siêu dữ liệu quan hệ.

    nhập mô tả hình ảnh ở đây

Spring Data JPA là một phần của dự án Spring Data giúp việc triển khai các kho lưu trữ dựa trên JPA dễ dàng hơn.

Đặc trưng:

  • Hỗ trợ tinh vi để xây dựng kho lưu trữ dựa trên Spring và JPA
  • Hỗ trợ cho các biến vị ngữ QueryDSL và do đó các truy vấn JPA an toàn loại
  • Kiểm toán minh bạch của lớp miền
  • Hỗ trợ phân trang, thực hiện truy vấn động, khả năng tích hợp mã truy cập dữ liệu tùy chỉnh
  • Xác thực các @Querytruy vấn có chú thích tại thời điểm bootstrap
  • Hỗ trợ ánh xạ thực thể dựa trên XML
  • Cấu hình kho lưu trữ dựa trên JavaConfig bằng cách giới thiệu @EnableJpaRepositories

    nhập mô tả hình ảnh ở đây

3

JPA

JPA là một đặc tả tiêu chuẩn hóa cách các đối tượng Java được ánh xạ tới một hệ thống cơ sở dữ liệu quan hệ. Là chỉ là một đặc điểm kỹ thuật, JPA bao gồm một tập các giao diện, giống như EntityManagerFactory, EntityManagervà chú thích giúp đỡ bạn ánh xạ một đối tượng thực thể Java vào một bảng cơ sở dữ liệu.

Có một số nhà cung cấp JPA, như HIbernate, EclipseLink hoặc Open JPA mà bạn có thể sử dụng.

Dữ liệu mùa xuân JPA

Spring Data JPA là một bản tóm tắt truy cập dữ liệu JPA. Giống như JPA, Spring Data JPA không thể hoạt động mà không có nhà cung cấp JPA.

Spring Data JPA cung cấp một giải pháp cho mẫu DDDRepository hoặc DAO (Data Acess Object) pattern. Nó cũng có thể tạo các truy vấn JPA thay mặt bạn thông qua các quy ước tên phương thức.

Spring Data JPA có thể hoạt động với Hibernate, Eclipse Link hoặc bất kỳ nhà cung cấp JPA nào khác. Một lợi ích rất thú vị của việc sử dụng Spring hoặc Java EE là bạn có thể kiểm soát các ranh giới giao dịch theo cách khai báo bằng cách sử dụng @Transactionalchú thích .

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.