mikä ero on yhteisen edustajakokouksen, Hibernaten ja Eclipselinkin välillä

kun ihmiset ovat uusia yhteisen edustajakokouksen, Hibernaten tai Eclipselinkin kanssa, he ovat usein hämmentyneitä siitä, mikä ero heidän tulisi käyttää projektissaan. Jos olet yksi heistä, älä huoli. Se on paljon helpompaa kuin miltä näyttää.

Katsotaanpa ensin yhteisen parlamentaarisen edustajakokouksen määrittelyä.

Java Persistence API (JPA)

JPA on lyhenne, joka tulee sanoista Java Persistence API. Se on spesifikaatio, joka on osa Java EE: tä ja määrittelee API: n objektien suhteellisuuskartoituksille ja pysyvien objektien hallinnalle. Voit käyttää tätä API: ta Java SE-ja Java EE-ympäristöissä.

eritelmä on tällä hetkellä saatavilla versiossa 2.2. Dokumentin voi ladata osoitteesta https://jcp.org/en/jsr/detail?id=338. API-purkki on saatavilla seuraavilla Maven-koordinaateilla:

<dependency> <groupId>javax.persistence</groupId> <artifactId>javax.persistence-api</artifactId> <version>2.2</version></dependency>

JPA ei itse tarjoa toteutusluokkia. API-purkki sisältää vain joukon rajapintoja, joiden avulla voit toteuttaa pysyvyystasosi. Mutta et voi käyttää edustajakokousta yksin. Tarvitset yhteisen edustajakokouksen tarjoajan, joka toteuttaa eritelmän. Vaihtoehtoja on useita. Suosituimpia ovat Hibernate ja EclipseLink. Mutta lisää siitä myöhemmin.

viime aikoihin asti yhteistä parlamentaarista edustajakokousta on hallinnoinut ja kehittänyt Java-Yhteisöprosessia (JCP) seurannut asiantuntijaryhmä. Tilanne muuttui, kun Oracle ilmoitti siirtävänsä kaikki Java EE-spesifikaatiot Eclipse Foundationille. Olemme nyt keskellä siirtymäprosessia, ja uusi erittelyprosessi määritellään pian.

mikä on määritelty yhteisen edustajakokouksen määrittelyssä

spesifikaatio määrittelee suurimman osan ominaisuuksista, jotka selitin tämän sivuston tutoriaaleissa ja videoissa. Voit käyttää niitä kaikkien yhteensopivien JPA-toteutusten kanssa.

käydään läpi tärkeimpiä.

Bootstrapping ja Basic entity-kuvaukset

ennen kuin voit aloittaa yhteisen parlamentaarisen edustajakokouksen käytön, sinun on lisättävä se projektiin, määritettävä pysyvyysyksikkö, kartoitettava entiteetit tietokantataulukkoihisi ja bootstrap it. Luultavasti tiedät jo, miten se tehdään, ja selitin sen hyvin yksityiskohtaisesti minun Getting Started with Hibernate artikkeli.

niin, hypätään tämä osuus tässä ja puhutaan mielenkiintoisemmista piirteistä.

Mapping Associations

JPA ei ainoastaan mahdollista yksinkertaisten entiteettiattribuuttien kartoittamista tietokantasarakkeisiin, vaan se mahdollistaa myös tietokantataulukoiden välisten assosiaatioiden kartoittamisen entiteettiattribuutteihin.

@Entitypublic class Review {...@ManyToOneprivate Book book;...}

Tämä tekee oliomallista usein erittäin mukavan käyttää, koska entiteetille tarvitsee vain kutsua getter-menetelmä liitännäisten entiteettien lataamiseksi. Taustalla pysyvyyden tarjoaja suorittaa kaikki tarvittavat tietokantaoperaatiot yhdistyksen hakemiseksi ja hallitsemiseksi.

niin mukava kuin tämä onkin, tämä ominaisuus aiheuttaa usein suorituskykyongelmia. Ennen kuin alat mallintaa yhteenliittymiä entiteettiesi välillä, varmista, että ymmärrät yhteisen edustajakokouksen Fetchtypesin vaikutuksen välttääksesi N+1 select-ongelmat.

Jpql ja Natiivikyselyt

JPA määrittelee oman kyselykielensä, jota kutsutaan JPQL: ksi. Se on samanlainen kuin SQL, mutta voit määritellä kyselyitä perustuu kartoitettu verkkotunnuksen malli sijasta tietokannan taulukkomalli.

seuraava koodinpätkä näyttää yksinkertaisen JPQL-kyselyn. Voit määritellä ad-hoc-kyselyn kutsumalla Createquery-menetelmää EntityManager em-sivustolla. Kuten näette, syntaksi näyttää hyvin samanlainen SQL. Jos et ole perehtynyt JPQL, tutustu minun JPQL opas, jossa selitän sen syntaksi ja ominaisuuksia suuria yksityiskohtia.

TypedQuery<Book> q = em.createQuery("SELECT b FROM Book b WHERE b.id = :id", Book.class);q.setParameter("id", 1L);Book b = q.getSingleResult();

kun suoritat tällaisen kyselyn, pysyvyyden tarjoajasi tulkitsee jpql-lausekkeen ja luo sille SQL-kyselyn. Näin pysyvyyden tarjoaja mukauttaa kyselyn tietokantakohtaiseen SQL-murteeseen ja parantaa sovelluksesi siirrettävyyttä.

valitettavasti tämä rajoittaa sinut myös spesifikaation määrittelemiin kyselyominaisuuksiin tai pysyvyyden tarjoajasi tukemiin ominaisuuksiin. Tämä ominaisuuskokonaisuus on huomattavasti pienempi kuin SQL: n tarjoama, eikä se sisällä omia tietokantaominaisuuksia.

mutta se ei tarkoita, ettetkö voisi käyttää mitään kehittyneitä tai monimutkaisia kyselyjä yhteisen edustajakokouksen kanssa. Se on suunniteltu vuotavaksi abstraktioksi ja voit suorittaa natiiveja SQL-kyselyitä. Näitä ei jäsennetä pysyvyyden tarjoajan toimesta, ja voit käyttää kaikkia tietokantasi tukemia ominaisuuksia. Mutta huomaa, että tämä saattaa vaikuttaa kielteisesti tietokannan siirrettävyyteen.

natiivikyselyn suorittaminen on melko yksinkertaista. Sinun tarvitsee vain soittaa createNativeQuery method sijaan Createquery method your EntityManager kanssa native SQL kysely.

Query q = em.createNativeQuery("SELECT * FROM book b WHERE id = :id", Book.class);q.setParameter("id", 1L);Book b = (Book) q.getSingleResult();

mukautetut tietotyypit

yhteisen parlamentaarisen edustajakokouksen määrittely Määrittelee useimpien vakiotyyppien yhdistämisen rajoittamatta sinua niihin. Koska JPA 2.1, voit helposti tukea mukautettuja tietotyyppejä AttributeConverter. Sinun tarvitsee vain ottaa käyttöön AttributeConverter-liitäntä ja merkitä Luokka @Converter-merkinnällä.

tässä on esimerkki attribuuttimuuntimesta, joka määrittää mukautetun kartoituksen Tekijätiedostoni enumille.

@Converter(autoApply = true)public class AuthorStatusConverter implements AttributeConverter<AuthorStatus, String> {Logger log = Logger.getLogger(AuthorStatusConverter.class.getSimpleName());@Overridepublic String convertToDatabaseColumn(AuthorStatus status) {switch (status) {case NOT_PUBLISHED:logDbConversion(status, "N");return "N";case PUBLISHED:logDbConversion(status, "P");return "P";case SELF_PUBLISHED:logDbConversion(status, "S");return "S";default:throw new IllegalArgumentException("AuthorStatus not supported.");}}@Overridepublic AuthorStatus convertToEntityAttribute(String dbData) {switch (dbData) {case "N":logEntityConversion(AuthorStatus.NOT_PUBLISHED, "N");return AuthorStatus.NOT_PUBLISHED;case "P":logEntityConversion(AuthorStatus.PUBLISHED, "P");return AuthorStatus.PUBLISHED;case "S":logEntityConversion(AuthorStatus.SELF_PUBLISHED, "S");return AuthorStatus.SELF_PUBLISHED;default:throw new IllegalArgumentException("AuthorStatus not supported.");}}private void logDbConversion(AuthorStatus status, String dbData) {log.debug("Convert AuthorStatus enum to .");}private void logEntityConversion(AuthorStatus status, String dbData) {log.debug("Convert DB value to AuthorStatus enum .");}}

EclipseLink and Hibernate

kuten aiemmin sanoin, tarvitset yhteisen edustajakokouksen tarjoajan, jos haluat käyttää yhteisen edustajakokouksen määrittelyä projektissasi. Se toteuttaa eritelmässä määritellyt rajapinnat. Suosituimpia ovat EclipseLink ja Hibernate.

JPA: n tarjoaman standardoidun API: n yksi etu on se, että sinun tarvitsee vain lisätä sen toteutus suorituksen aikana ja että voit korvata sen toisella muuttamatta mitään koodia. Standardoitu API tekee EclipseLink ja Hibernate vaihdettavissa.

joten, mihin tarvitaan erilaisia toteutuksia?

JPA-toteutuksia hallinnoivat itsenäiset tiimit, ja voit valita sen, joka tarjoaa parhaan suorituskyvyn tai tuen sovellus-ja teknologiapinollesi. Ne myös Erottautuvat tarjoamalla ylimääräisiä, epätyypillisiä toimintoja. Tätä käytetään usein innovaatioiden edistämiseen. Tänään suosittu, oma ominaisuus voi olla ensimmäinen askel seuraavaan lisäykseen JPA standardi. Käyttämällä näitä omia ominaisuuksia, tietenkin, tekee paljon vaikeampaa korvata tietyn yhteisen parlamentaarisen edustajakokouksen täytäntöönpanoa.

EclipseLink

EclipseLink on yhteisen parlamentaarisen edustajakokouksen referenssitoteutus ja toteuttaa yhteisen edustajakokouksen version 2.2. Se oli yksi ensimmäisistä projekteista, joka tuli osaksi ee4j: tä.

helpoin tapa lisätä EclipseLink projektiin on käyttää seuraavia Maven-koordinaatteja.

<dependency> <groupId>org.eclipse.persistence</groupId> <artifactId>eclipselink</artifactId> <version>2.7.1</version></dependency>

mielenkiintoisia omistuksellisia ominaisuuksia

YPA-standardin määrittelemien ominaisuuksien lisäksi EclipseLink tarjoaa myös useita mielenkiintoisia, omistuksellisia ominaisuuksia, kuten:

  • tietokantamuutostapahtumien käsittely
  • yhdistettyjen pysyvyysyksiköiden kartoittaminen kokonaisuuksien kartoittamiseksi useiden tietokantojen taulukoihin
  • tuki monivuokraukselle

Hibernate

Hibernate on Red Hatin erittäin suosittu yhteisen edustajakokouksen määrittelyn toteutus. Se toteuttaa lähes kaikki JPA 2.2: n määrittelemät ominaisuudet ja julkaisee pian täysin yhteensopivan version.

seuraava Maven-riippuvuus lisää Hibernaten projektiisi.

<dependency><groupId>org.hibernate</groupId><artifactId>hibernate-core</artifactId><version>5.1.11</version></dependency>

mielenkiintoisia omistuksellisia ominaisuuksia

samanlaisia kuin EclipseLink, Hibernate tarjoaa joukon mielenkiintoisia, omistuksellisia ominaisuuksia, kuten:

  • laajennettu tuki luonnollisille tunnuksille
  • Ladataan useita entiteettejä niiden ensisijaisella avaimella
  • luominen-ja päivitysaikaleimojen hallinta
  • liittyminen yhdistymättömiin entiteetteihin kyselyissä
  • tuki monivuokralle

Vastaa

Sähköpostiosoitettasi ei julkaista.