Rozdiel medzi JPA, Hibernate a EclipseLink

1. Úvod

V tomto výučbe sa budeme venovať témam Hibernate a Java Persistence API (JPA) - so zameraním na rozdiely medzi nimi.

Budeme najskôr preskúmajte, čo je JPA, ako sa používa a základné koncepty za tým.

Potom sa pozrieme na to, ako Hibernate a EclipseLink zapadajú do obrazu.

2. Objektovo-relačné mapovanie

Predtým, ako sa ponoríme do JPA, je dôležité pochopiť koncept Object-Relational Mapping - tiež známy ako ORM.

Objektovo-relačné mapovanie je jednoduché proces pretrvávania ľubovoľného objektu Java priamo do databázovej tabuľky. Názov pretrvávajúceho objektu sa zvyčajne stáva názvom tabuľky a každé pole v tomto objekte sa stáva stĺpcom. Po zostavení tabuľky zodpovedá každý riadok záznamu v aplikácii.

3. Úvod do JPA

Rozhranie Java Persistence API alebo JPA je špecifikácia, ktorá definuje správu relačných údajov v aplikácii Java. API mapuje množinu konceptov, ktoré definujú, ktoré objekty v aplikácii by sa mali zachovať a ako by ich mali zachovať.

Je dôležité si to tu uvedomiť JPA je iba špecifikácia a na to, aby fungovalo, je potrebné implementáciu - ale o tom neskôr.

Teraz poďme diskutovať o niektorých základných konceptoch JPA, ktoré musí implementácia pokrývať.

3.1. Subjekt

The javax.persistence.Entity trieda definuje, ktoré objekty sa majú uchovať v databáze. Pre každú pretrvávajúcu entitu vytvorí JPA novú tabuľku vo vybranej databáze.

Okrem toho by všetky vybrané entity mali definovať primárny kľúč označený @Id anotácia. Spolu s @GeneratedValue anotáciu, definujeme, že primárny kľúč by sa mal generovať automaticky, keď sa záznam uchová v databáze.

Pozrime sa na rýchly príklad entity opísanej JPA.

@Entity public class Car {@GeneratedValue @Id public long id; // zakladatelia a zakladatelia} 

Pamätajte, že to momentálne nebude mať na aplikáciu žiadny vplyv - JPA neposkytuje žiadny implementačný kód.

3.2. Perzistencia v teréne

Ďalším kľúčovým konceptom JPA je vytrvalosť v teréne. Keď je objekt v Jave definovaný ako entita, všetky jeho polia sa automaticky zachovajú ako rôzne stĺpce v tabuľke entít.

Ak existuje pole v pretrvávajúcom objekte, sme to my nie ak chceme zotrvať v databáze, môžeme pole vyhlásiť za prechodné pomocou @ Prechodné anotácia.

3.3. Vzťahy

Ďalšie, JPA určuje, ako by sme mali riadiť vzťahy medzi rôznymi databázovými tabuľkami v rámci našej aplikácie. Ako sme videli, JPA to zaobchádza s anotáciami. Musíme si uvedomiť štyri anotácie vzťahov:

  1. @Jeden na jedného
  2. @OneToMany
  3. @ManyToOne
  4. @ManyToMany

Pozrime sa, ako to funguje:

@Entity public class SteeringWheel {@OneToOne súkromné ​​auto // getre a setre}

V našom príklade vyššie Volant trieda popisuje vzťah jeden k jednému s našimi Auto triedy zo skôr.

3.4. Správca entít

Nakoniec trieda javax.persistence.EntityManager špecifikuje operácie do az databázy. The EntityManager obsahuje bežné operácie vytvárania, čítania, aktualizácie a mazania (CRUD) ktoré sú uchované v databáze.

4. Implementácie spoločného parlamentného zhromaždenia

Keď špecifikácia JPA definuje, ako a čo by sme mali trvať, teraz sme je potrebné zvoliť poskytovateľa implementácie na dodanie potrebného kódu. Bez takého poskytovateľa by sme potrebovali implementovať všetky príslušné triedy, aby vyhovovali JPA, a to je veľa práce!

Existuje veľa poskytovateľov, z ktorých si môžete vybrať, pričom každý má svoje vlastné výhody a nevýhody. Pri rozhodovaní na ktoré by sme mali použiť zvážte niekoľko nasledujúcich bodov:

  1. Splatnosť projektu - ako dlho je tu poskytovateľ, a ako je to dobre zdokumentované?
  2. Podprojekty - má poskytovateľ užitočné subprojekty pre našu novú aplikáciu?
  3. Podpora Spoločenstva - je tam ktokoľvek, kto nám pomôže, keď skončíme s kritickou chybou?
  4. Benchmarking - aký výkonný je implementácia?

Aj keď sa nebudeme podrobne venovať benchmarkingu rôznych poskytovateľov JPA, JPA Performance Benchmark (JPAB) obsahuje cenný prehľad.

Ak to nebudeme robiť, poďme sa v krátkosti pozrieť na niektorých z najlepších poskytovateľov JPA.

5. Hibernácia

Vo svojej podstate Hibernate je nástroj objektovo-relačného mapovania, ktorý poskytuje implementáciu JPA. Hibernate je jednou z najrozvinutejších implementácií JPA s podporou obrovskej komunity.

Implementuje všetky javax.perzistenciatriedy, na ktoré sme sa pozreli skôr v článku, ako aj poskytovanie funkcií nad rámec JPA - nástroje dlhodobého spánku, overovanie a vyhľadávanie. Aj keď môžu byť tieto API špecifické pre hibernáciu užitočné, nie sú potrebné v aplikáciách, ktoré vyžadujú iba základnú funkcionalitu JPA.

Poďme sa rýchlo pozrieť na to, čo ponúka režim dlhodobého spánku s @Entity anotácia.

Pri plnení zmluvy JPA @ org.hibernate.annotations.Entity pridáva ďalšie metadáta, ktoré idú nad rámec špecifikácie JPA. To umožňuje doladenie vytrvalosti entity. Pozrime sa napríklad na niekoľko anotácií ponúkaných programom Hibernate, ktoré rozširujú funkcionalitu @Entity:

  1. @ Tabuľka umožňuje nám to uveďte názov tabuľky vytvorené pre entitu
  2. @BatchSizešpecifikuje veľkosť dávky pri načítanís od stola

Za zmienku tiež stojí niekoľko ďalších funkcií, ktoré JPA nešpecifikuje, ktoré sa môžu ukázať ako užitočné pri väčších aplikáciách:

  1. Prispôsobiteľné výroky CRUD pomocou @SQLInsert, @SQLUpate a @SQLDelete anotácie
  2. Podpora mäkkého mazania
  3. Nezmeniteľné subjekty s @ Nezmeniteľné anotácia

Ak sa chcete hlbšie ponoriť do vytrvalosti v režimoch Hibernate a Java, prejdite na našu sériu tutoriálov jarnej vytrvalosti.

6. EclipseLink

EclipseLink, postavený nadáciou Eclipse, poskytuje implementáciu JPA otvoreného zdroja. Ďalej EclipseLink podporuje rad ďalších štandardov perzistencie, ako je Java Architecture for XML Binding (JAXB).

Zjednodušene povedané, namiesto pretrvávania objektu v riadku databázy ho JAXB namapuje na reprezentáciu XML.

Ďalej porovnaním toho istého @Entity implementácia anotácie, vidíme, že EclipseLink ponúka opäť rôzne rozšírenia. Aj keď pre @ neexistuje žiadna anotáciaBatchSize ako sme videli skôr, EclipseLink ponúka ďalšie možnosti, ktoré Hibernate nemá.

Napríklad:

  1. @ReadOnly - určuje, že entita, ktorá sa má uchovať, je iba na čítanie
  2. @Struct - definuje triedu na mapovanie na databázový typ „struct“

Ak sa chcete dozvedieť viac o tom, čo EclipseLink ponúka, choďte do nášho sprievodcu EclipseLink s jarou.

7. Záver

V tomto článku sme pozrel sa na Java Persistence API alebo JPA.

Nakoniec sme to preskúmali v čom sa líši od Hibernate a EclipseLink.


$config[zx-auto] not found$config[zx-overlay] not found