JPA vs Hibernate
Aproape toate aplicațiile de întreprindere sunt necesare pentru a accesa bazele de date relaționale în mod regulat. Dar o problemă cu care se confruntă tehnologiile anterioare (cum ar fi JDBC) a fost nepotrivirea impedanței (diferența dintre tehnologiile orientate pe obiect și cele relaționale). O soluție pentru această problemă a fost introdusă prin introducerea unui strat abstract numit strat de persistență, care încapsulează accesul la baza de date din logica de business. JPA (Java Persistence API) este un cadru dedicat pentru gestionarea datelor relaționale (folosind stratul de persistență) în aplicațiile Java. Există multe implementări ale furnizorilor de JPA utilizate în comunitatea de dezvoltatori Java. Hibernate este cea mai populară astfel de implementare a JPA (DataNucleus, EclipseLink și OpenJPA sunt câteva altele). Cea mai nouă versiune JPA (JPA 2.0) este complet acceptată de Hibernate 3.5, care a fost lansat în martie 2010.
Ce este JPA?
JPA este un cadru pentru gestionarea datelor relaționale pentru Java. Poate fi utilizat cu aplicații care utilizează JSE (Java Platform, Standard Edition) sau JEE (Java Platform, Enterprise Edition). Versiunea sa actuală este JPA 2.0, care a fost lansată pe 10 decembrie 2009. JPA a înlocuit EJB 2.0 și EJB 1.1 entity beans (care au fost puternic criticate pentru că sunt grele de către comunitatea de dezvoltatori Java). Deși entity beans (în EJB) au furnizat obiecte de persistență, mulți dezvoltatori au fost obișnuiți să utilizeze obiecte relativ ușoare oferite de DAO (Data Access Objects) și alte cadre similare. Drept urmare, a fost introdus JPA și a capturat multe dintre caracteristicile bune ale cadrelor menționate mai sus.
Persistența, așa cum este descrisă în JPA, acoperă API-ul (definit în javax.persistență), JPQL (Java Platform, Enterprise Edition) și metadate necesare pentru obiectele relaționale. Starea unei entități de persistență este de obicei menținută într-un tabel. Instanțele unei entități corespund rândurilor din tabelul bazei de date relaționale. Metadatele sunt folosite pentru a exprima relațiile dintre entități. Adnotările sau fișierele descriptor XML separate (implementate împreună cu aplicația) sunt utilizate pentru a specifica metadatele în clasele de entități. JPQL, care este similar cu interogările SQL, sunt folosite pentru a interoga entitățile stocate.
Ce este Hibernate?
Hibernate este un cadru care poate fi utilizat pentru maparea obiect-relațională destinată limbajului de programare Java. Mai precis, este o bibliotecă ORM (object-relational mapping) care poate fi utilizată pentru a mapa modelul obiect-relațional în modelul relațional convențional. În termeni simpli, creează o mapare între clasele Java și tabelele din bazele de date relaționale, de asemenea, între tipurile de date Java la SQL. Hibernate poate fi folosit și pentru interogarea și preluarea datelor prin generarea de apeluri SQL. Prin urmare, programatorul este scutit de manipularea manuală a seturilor de rezultate și conversia obiectelor. Hibernate este lansat ca un cadru gratuit și open source distribuit sub licență GNU. O implementare pentru API-ul JPA este furnizată în Hibernate 3.2 și versiunile ulterioare. Gavin King este fondatorul Hibernate.
Care este diferența dintre JPA și Hibernate?
JPA este un cadru pentru gestionarea datelor relaționale în aplicațiile Java, în timp ce Hibernate este o implementare specifică a JPA (deci, în mod ideal, JPA și Hibernate nu pot fi comparate direct). Cu alte cuvinte, Hibernate este unul dintre cele mai populare cadre care implementează JPA. Hibernate implementează JPA prin bibliotecile Hibernate Annotation și EntityManager care sunt implementate peste bibliotecile Hibernate Core. Atât EntityManager, cât și Adnotările urmează ciclul de viață al Hibernate. Cea mai nouă versiune JPA (JPA 2.0) este complet acceptată de Hibernate 3.5. JPA are avantajul de a avea o interfață standardizată, astfel încât comunitatea de dezvoltatori va fi mai familiarizată cu aceasta decât Hibernate. Pe de altă parte, API-urile Hibernate native pot fi considerate mai puternice, deoarece caracteristicile sale sunt un superset față de cele ale JPA.