Sự khác nhau giữa JPA và Hibernate framework

Trước khi đi vào những bài viết về JPA, thiết nghĩ mình cần làm rõ sự khác nhau giữa JPA và Hibernate bởi vì mình thấy đa số các bạn không tìm hiểu kỹ sẽ không phân biệt được sự khác nhau giữa chúng.

Trước tiên là nói về JPA, JPA là viết tắt của Java Persistence API, nó là đặc tả hay còn có thể gọi là chuẩn cho cách chúng ta truy cập, lưu trữ và quản lý dữ liệu giữa các đối tượng trong Java và các loại database (Object Relational Mapping). Như các bạn thấy, như tên gọi của mình, JPA chỉ là một API định nghĩa các đặc tả cần thiết và không có code hiện thực từ những đặc tả đó. Nó chỉ chứa những hướng dẫn để hiện thực Object Relational Mapping.

Trong khi đó, Hibernate là một framework hiện thực các đặc tả của JPA. Dựa vào các đặc tả của JPA, Hibernate sẽ hiện thực tất cả các tính năng cần có của một Object Relational Mapping framework. Tất cả những thay đổi trong đặc tả của JPA, Hibernate cũng phải có những cập nhập trong cách hiện thực theo những thay đổi đó.

Nói tóm lại, chúng ta có thể xem JPA là một interface và Hibernate là người hiện thực cái interface đó.

Chúng ta có thể tìm thấy được nhiều framework khác hiện thực các đặc tả của JPA, ví dụ như Eclipse Link, OpenJPA…

Nhưng Hibernate là framework hiện thực JPA được sử dụng phổ biến nhất!

16 thoughts on “Sự khác nhau giữa JPA và Hibernate framework

  1. Chào anh, khi em đi phỏng vấn sau khi show project đã làm anh phỏng vấn em có hỏi project này em dùng gì để truy vấn cơ sở dữ liệu. Em trả lời là Hibernate.
    Nhưng trước em có 1 bạn học cùng trường vào phỏng vấn trc và trả lời là JPA.
    Nên anh phỏng vấn nói bạn trc em trả lời là JPA cơ mà, phải là JPA mới đúng, em không biết gì, và đã trả lời sai nên anh ấy sẽ không hỏi thêm gì nữa. Sau đó thì kết thúc phỏng vấn.
    Em muốn hỏi là nhận được câu hỏi như trên thì trả lời như thế nào mới đúng? Và câu trả lời của em có sai không.

    1. Em với bạn em làm cùng project hay sao?
      Như anh nói trong bài viết này, Hibernate có 2 phần implement để thao tác với database. Một là cái của riêng nó và cái thứ hai là hiện thực specs của JPA.
      Anh phải coi code thì mới chắc là tụi em đang sử dụng cái nào của Hibernate. Và câu trả lời sẽ depend vào đó.

  2. Page của anh chưa có bài nào về spring security nhỉ. Em vẫn chưa hiểu rõ về cách hoạt động của nó lắm,
    Cả JWT nữa, em thấy có tool để decode được cái token ấy thì nó còn gì là bảo mật nữa nhỉ. Thanks

    1. jdbc là những cái căn bản để xây dựng nên những thứ như hibernate, myBatis…
      tùy theo yêu cầu mà sử dụng thôi, nhưng dùng framework sẽ tiết kiệm thời gian viết code, cấu hình các thứ…

  3. Chào ban
    Bạn cho mình hỏi EJB là gì? có khác gì với JPA hay không?, Mình đọc mà ko thấy rõ các khái niệm này.

    Cám ơn bạn

    1. Chào bạn,

      EJB là một framework để phát triển các ứng dụng doanh nghiệp, còn JPA là một framework để thao tác với database. Hoàn toàn khác nhau nhé bạn!

    1. Không em, JPA chỉ là các định nghĩa của một ORM framework cần làm để truy vấn kết nối cơ sở dữ liệu. Còn Hibernate mới là cái trực tiếp làm chuyện đó, nó xây dựng code để có thể thao tác với cơ sở dữ liệu. Em nên phân biệt rõ để khỏi nhầm lẫn.

Add Comment