Forskjellen mellom JPA, Hibernate og EclipseLink

1. Introduksjon

I denne veiledningen vil vi diskutere dvalemodus og Java Persistence API (JPA) - med fokus på forskjellene mellom dem.

Vi vil begynn med å utforske hva JPA er, hvordan det brukes, og kjernekonseptene bak det.

Deretter tar vi en titt på hvordan Hibernate og EclipseLink passer inn i bildet.

2. Objektrelasjonell kartlegging

Før vi dykker ned i JPA, er det viktig å forstå begrepet Object-Relational Mapping - også kjent som ORM.

Objektrelasjonell kartlegging er ganske enkelt prosessen med å vedvare ethvert Java-objekt direkte til en databasetabell. Vanligvis blir navnet på objektet som vedvares navnet på tabellen, og hvert felt i objektet blir en kolonne. Når tabellen er satt opp, tilsvarer hver rad en post i applikasjonen.

3. En introduksjon til JPA

Java Persistence API, eller JPA, er en spesifikasjon som definerer styring av relasjonsdata i et Java-program. API-et kartlegger et sett med konsepter som definerer hvilke objekter i applikasjonen som skal vedvares, og hvordan det skal vedvare dem.

Det er viktig å merke seg her at JPA er bare en spesifikasjon og at den trenger en implementering for å fungere - men mer om det senere.

La oss nå diskutere noen av de viktigste JPA-konseptene som en implementering må dekke.

3.1. Enhet

De javax.persistence.Entity klasse definerer hvilke objekter som skal vedvares i databasen. For hver vedvarende enhet oppretter JPA en ny tabell i den valgte databasen.

I tillegg bør alle valgte enheter definere en primærnøkkel betegnet med @Id kommentar. Sammen med @GeneratedValue kommentar, definerer vi at primærnøkkelen skal genereres automatisk når posten vedholdes til databasen.

La oss se på et raskt eksempel på en enhet beskrevet av JPA.

@Entity offentlig klasse bil {@GeneratedValue @Id offentlig lang id; // getters og setters} 

Husk at dette for øyeblikket ikke vil ha noen innvirkning på applikasjonen - JPA gir ingen implementeringskoder.

3.2. Feltpersistens

Et annet kjernekonsept med JPA er felt persistens. Når et objekt i Java er definert som en enhet, fortsetter alle felt i det automatisk som forskjellige kolonner i enhetstabellen.

Hvis det er et felt i et vedvarende objekt som vi ikke gjør det ønsker å fortsette til databasen, kan vi erklære feltet forbigående med @Flyktig kommentar.

3.3. Forhold

Neste, JPA spesifiserer hvordan vi skal håndtere forholdet mellom forskjellige databasetabeller innenfor søknaden vår. Som vi har sett, håndterer JPA dette med merknader. Det er fire forholdsmerknader som vi må huske på:

  1. @OneToOne
  2. @OneToMany
  3. @ManyToOne
  4. @ManyToMany

La oss ta en titt på hvordan dette fungerer:

@Entity offentlig klasse SteeringWheel {@OneToOne privatbilbil // getters og setters}

I vårt eksempel ovenfor er Ratt klasse beskriver et forhold til vårt forhold Bil klasse fra tidligere.

3.4. Enhetsleder

Til slutt, javax.persistence.EntityManager-klasse spesifiserer operasjoner til og fra databasen. De EntityManager inneholder vanlige opprett, les, oppdater og slett (CRUD) operasjoner som er vedvarende til databasen.

4. JPA-implementeringer

Med JPA-spesifikasjon som definerer hvordan og hva vi skal vedvare, vi nå trenger å velge en implementeringsleverandør for å levere den nødvendige koden. Uten en slik leverandør vil vi trenge å implementere alle relevante klasser for å være i samsvar med JPA, og det er en mye av arbeid!

Det er mange leverandører å velge mellom, hvor hver viser sine egne fordeler og ulemper. Når du tar en beslutning som vi skal bruke, bør vi vurder noen av følgende punkter:

  1. Prosjektets modenhet - hvor lenge har leverandøren eksistert, og hvor godt dokumentert er det?
  2. Delprosjekter - har leverandøren noen nyttige delprosjekter for vår nye søknad?
  3. Samfunnsstøtte - er det noen som kan hjelpe oss når vi får en kritisk feil?
  4. Referansemåling - hvor performant er implementeringen?

Selv om vi ikke skal gå i dybden med benchmarking av forskjellige JPA-leverandører, inneholder JPA Performance Benchmark (JPAB) verdifull innsikt i dette.

Med det ute av veien, la oss ta en kort titt på noen av de beste leverandørene av JPA.

5. Dvalemodus

I sin kjerne Dvalemodus er et objektrelasjonelt kartleggingsverktøy som gir en implementering av JPA. Dvalemodus er en av de mest modne JPA-implementeringene rundt, med et stort samfunn som støtter prosjektet.

Den implementerer alt javax. utholdenhetklasser vi så på tidligere i artikkelen, i tillegg til å tilby funksjonalitet utover JPA - Dvalemodusverktøy, validering og søk. Selv om disse dvalespesifikke API-ene kan være nyttige, er de ikke nødvendige i applikasjoner som bare krever JPA-grunnleggende funksjonalitet.

La oss ta en rask titt på hva Hibernate tilbyr med @Enhet kommentar.

Mens du oppfyller JPA-kontrakten, @ org.hibernate.annotations.Entity legger til flere metadata som går utover JPA-spesifikasjonen. Dette gjør det mulig å finjustere enhetens utholdenhet. La oss for eksempel se på noen kommentarer som tilbys av Hibernate som utvider funksjonaliteten til @Enhet:

  1. @Bord tillater oss å spesifiser navnet på tabellen opprettet for enheten
  2. @Partistørrelse, Gruppestørrelsespesifiserer batchstørrelse når du henter rettighets fra bordet

Det er også verdt å merke seg noen av de ekstra funksjonene som JPA ikke spesifiserer, som kan være nyttige i større applikasjoner:

  1. Tilpasses CRUD-setninger med @SQLInsert, @SQLUpate og @SQLDelete kommentarer
  2. Støtte for myk sletting
  3. Uforanderlige enheter med @Immutable kommentar

For et dypere dykk i dvalemodus og Java-utholdenhet - gå over til vår-utholdenhetsveiledningsserien.

6. EclipseLink

EclipseLink, bygget av Eclipse Foundation, gir en åpen JPA-implementering. I tillegg EclipseLink støtter en rekke andre utholdenhetsstandarder som Java Architecture for XML Binding (JAXB).

Enkelt sagt, i stedet for å vedvare et objekt til en databaserad, tilordner JAXB det til en XML-representasjon.

Neste, ved å sammenligne det samme @Enhet merknad implementering, ser vi at EclipseLink igjen tilbyr forskjellige utvidelser. Mens det ikke er noen kommentar til @Partistørrelse, Gruppestørrelse som vi så tidligere, EclipseLink tilbyr andre alternativer som Hibernate ikke gjør.

For eksempel:

  1. @ReadOnly - spesifiserer at enheten som skal vedvares, er skrivebeskyttet
  2. @Struktur - definerer klassen som skal tilordnes til en 'struct' type database

For å lese mer om hva EclipseLink har å tilby, gå til guiden vår om EclipseLink med Spring.

7. Konklusjon

I denne artikkelen har vi så på Java Persistence API, eller JPA.

Til slutt utforsket vi hvordan det skiller seg fra dvalemodus og EclipseLink.


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