Mikä on yhteinen edustajakokous? Johdatus Java Persistence API

spesifikaationa Java Persistence API koskee pysyvyyttä, mikä tarkoittaa löyhästi mitä tahansa mekanismia, jolla Java-objektit elävät kauemmin kuin ne luonut sovellusprosessi. Kaikkia Java-objekteja ei tarvitse jatkaa, mutta useimmat sovellukset säilyttävät Keskeiset liikeobjektit. JPA-spesifikaation avulla voit määritellä, mitä objekteja tulee jatkaa ja miten näitä objekteja tulee jatkaa Java-ohjelmissasi.

sinänsä yhteinen parlamentaarinen edustajakokous ei ole väline tai kehys; pikemminkin se määrittelee joukon käsitteitä, jotka voidaan toteuttaa millä tahansa työkalulla tai kehyksellä. Vaikka JPA: n object-relational mapping (ORM) – malli perustui alun perin Hibernateen, se on sittemmin kehittynyt. Samoin, vaikka JPA oli alun perin tarkoitettu käytettäväksi relaatio/SQL tietokantoja, jotkut JPA toteutuksia on laajennettu käytettäväksi NoSQL datastores. Suosittu kehys, joka tukee JPA: ta NoSQL: llä, on EclipseLink, joka on JPA 2.2: n referenssitoteutus.

JPA ja Hibernate

koska niiden historia on kietoutunut toisiinsa, Hibernate ja JPA ovat usein Yhtyneet toisiinsa. Kuitenkin, kuten Java Servlet spesifikaatio, JPA on synnyttänyt monia yhteensopivia työkaluja ja kehyksiä; Hibernate on vain yksi niistä.

Gavin Kingin kehittämä ja vuoden 2002 alussa julkaistu Hibernate on ORM-kirjasto Javalle. King kehitti Hibernaten vaihtoehdoksi entiteettipavuille pysyvyyden vuoksi. Kehys oli tuolloin niin suosittu ja tarpeellinen, että monet sen ajatuksista hyväksyttiin ja kodifioitiin yhteisen parlamentaarisen edustajakokouksen ensimmäiseen eritelmään.

nykyään Hibernate ORM on yksi kypsimmistä JAVAM-toteutuksista ja edelleen suosittu vaihtoehto Orm: lle. Hibernate ORM 5.3.8 (Nykyinen versio tätä kirjoitettaessa) toteuttaa yhteisen parlamentaarisen edustajakokouksen 2.2. Lisäksi Hibernaten työkaluperhe on laajentunut sisältämään suosittuja työkaluja, kuten Hibernate Search, Hibernate Validator ja Hibernate OGM, joka tukee verkkotunnusmallin pysyvyyttä NoSQL: lle.

mikä on Java ORM?

vaikka ne eroavat toteutuksiltaan, jokainen JPA-toteutus tarjoaa jonkinlaisen ORM-tason. Jotta ymmärtää JPA ja JPA-yhteensopivia työkaluja, sinun täytyy olla hyvä ote ORM.

olioiden relaatiokartoitus on tehtävä, jota kehittäjillä on hyvä syy välttää tekemästä manuaalisesti. Viitekehys kuten Hibernate ORM tai EclipseLink kodifioi tehtävän kirjastoksi tai viitekehykseksi, ORM-kerrokseksi. Osana sovellusarkkitehtuuria ORM-taso vastaa ohjelmistoobjektien muuntamisen hallinnasta vuorovaikutukseen relaatiotietokannan taulukoiden ja sarakkeiden kanssa. Javassa ORM-kerros muuntaa Java-luokkia ja olioita niin, että ne voidaan tallentaa ja hallita relaatiotietokantaan.

oletuksena jatkettavan objektin nimi muuttuu taulukon nimeksi ja kentät sarakkeiksi. Kun taulukko on määritetty, jokainen taulukon rivi vastaa sovelluksen objektia. Objektien kartoitus on konfiguroitavissa, mutta oletusarvot toimivat yleensä hyvin.

kuva 1 kuvaa yhteisen parlamentaarisen edustajakokouksen ja ORM-tason roolia sovelluskehityksessä.

JavaWorld / IDG

kuva 1. YPA ja ORM-taso

Javan ORM-tason määrittäminen

Kun määrität uuden projektin yhteisen parlamentaarisen edustajakokouksen käyttöä varten, sinun on määritettävä datastore ja yhteisen parlamentaarisen edustajakokouksen tarjoaja. Määrität datastore-liittimen muodostamaan yhteyden valitsemaasi tietokantaan (SQL tai NoSQL). Sisällytät ja määrität myös yhteisen edustajakokouksen tarjoajan, joka on kehys, kuten Hibernate tai EclipseLink. Vaikka voit määrittää yhteisen edustajakokouksen manuaalisesti, monet kehittäjät haluavat käyttää Springin out-of-the-box-tukea. Katso alla olevasta kohdasta ”JPA installation and setup” sekä manuaalisen että Jousipohjaisen yhteisen parlamentaarisen edustajakokouksen asennuksen ja asennuksen esittely.

tietojen pysyvyys Javassa

ohjelmoinnin näkökulmasta ORM-taso on sovitinkerros: se sovittaa objektikaavioiden kielen SQL-ja relaatiotaulukoiden kieleen. ORM-tason avulla oliokeskeiset kehittäjät voivat rakentaa ohjelmistoja, jotka ylläpitävät dataa poistumatta koskaan oliokeskeisestä paradigmasta.

kun käytät JPA: ta, luot datastoresta kartan sovelluksen tietomalliobjekteihin. Sen sijaan, että määrittäisit, miten objektit tallennetaan ja noudetaan, määrität kohteiden ja tietokantasi välisen kartoituksen ja vedotat sitten JPA: ta niiden säilyttämiseen. Jos käytät relaatiotietokantaa, suuri osa sovelluskoodin ja tietokannan välisestä yhteydestä hoidetaan JDBC: llä, Java Database Connectivity API: lla.

spec-ominaisuutena JPA tarjoaa metatietohuomautuksia, joiden avulla määritellään kohteiden ja tietokannan välinen kartoitus. Jokainen yhteisen parlamentaarisen edustajakokouksen toteutus tarjoaa oman moottorinsa yhteisen parlamentaarisen edustajakokouksen merkinnöille. Yhteisen parlamentaarisen edustajakokouksen spec: ssä on myös PersistanceManager tai EntityManager, jotka ovat keskeisiä yhteyspisteitä yhteisen parlamentaarisen edustajakokouksen järjestelmään (jolloin liiketoimintalogiikkakoodi kertoo järjestelmälle, mitä kartoitetuille objekteille tehdään).

kaiken tämän konkretisoimiseksi kannattaa harkita listausta 1, joka on yksinkertainen dataluokka muusikon mallintamiseen.

listaus 1. Yksinkertaista dataluokkaa Javassa

Musician Luokka listauksessa 1 käytetään datan säilyttämiseen. Se voi sisältää alkeellisia tietoja, kuten nimikentän. Sillä voi olla suhteita myös muihin luokkiin, kuten mainInstrument ja performances.

Musician’s reason for being is to containing data. Tämäntyyppistä luokkaa kutsutaan joskus DTO: ksi eli tiedonsiirto-objektiksi. Dtot ovat yleinen piirre ohjelmistokehityksessä. Vaikka niissä on monenlaista dataa, ne eivät sisällä mitään bisneslogiikkaa. Pysyvät dataobjektit ovat kaikkialla esiintyvä haaste ohjelmistokehityksessä.

tietojen pysyvyys JDBC: llä

yksi tapa tallentaa Musician Luokka relaatiotietokantaan olisi käyttää JDBC-kirjastoa. JDBC on abstraktiokerros, jonka avulla sovellus antaa SQL-komentoja ajattelematta taustalla olevaa tietokannan toteutusta.

listaus 2 osoittaa, miten Musician – luokkaa voisi jatkaa JDBC: n avulla.

listaus 2. JDBC lisäämällä tietueen

koodi listauksessa 2 on melko itsedokumentoiva. georgeHarrison objekti voi tulla mistä tahansa (front-end submit, external service, jne.), ja on sen ID ja nimi kentät asetettu. Objektin kenttiä käytetään tämän jälkeen antamaan SQL: n arvot insert lausuma. (PreparedStatement Luokka on osa JDBC: tä, joka tarjoaa tavan soveltaa arvoja turvallisesti SQL-kyselyyn.)

vaikka JDBC sallii manuaalisen kokoonpanon mukana tulevan ohjauksen, se on hankala verrattuna JPA: han. Muokataksesi tietokantaa sinun on ensin luotava SQL-kysely, joka kartoittaa Java-objektisi relaatiotietokannan taulukoihin. Sitten sinun täytyy muokata SQL aina objektin allekirjoitus muuttuu. JDBC: llä SQL: n ylläpitämisestä tulee tehtävä itsessään.

tietojen pysyvyys yhteisen parlamentaarisen edustajakokouksen kanssa

harkitaan nyt listausta 3, jossa säilytetään Musician Luokka yhteisen edustajakokouksen avulla.

listaus 3. Sinnikäs George Harrison JPA: lla

Musician georgeHarrison = new Musician(0, "George Harrison");musicianManager.save(georgeHarrison);

listaus 3 korvaa SQL: n käsikirjan listauksesta 2 yhdellä rivillä, session.save(), joka ohjeistaa JPA: ta jatkamaan objektia. Siitä lähtien SQL-muunnosta hoitaa framework, joten oliokeskeisestä paradigmasta ei tarvitse koskaan poistua.

METAHUOMAUTUKSET yhteisessä parlamentaarisessa edustajakokouksessa

taika listauksessa 3 on seurausta kokoonpanosta, joka on luotu yhteisen edustajakokouksen huomautusten avulla. Kehittäjät käyttävät merkintöjä ilmoittaakseen JPA: lle, mitä objekteja tulisi jatkaa ja miten niitä tulisi jatkaa.

listaus 4 osoittaa

Musician

luokan, jossa on yksi yhteinen edustajakokous-merkintä.

listaus 4. JPA: n @Entity annotation

@Entitypublic class Musician { // ..class body}

pysyviä olioita kutsutaan joskus entiteeteiksi. Liittäminen @Entity sellaiseen luokkaan kuin Musician ilmoittaa JPA: lle, että tämä luokka ja sen objektit on säilytettävä.

yhteisen parlamentaarisen edustajakokouksen määrittäminen

kuten useimmissa moderneissa kehyksissä, yhteinen edustajakokous sisältää koodauksen yleissopimuksella (tunnetaan myös nimellä convention over configuration), jossa kehys tarjoaa oletuskokoonpanon, joka perustuu alan parhaisiin käytäntöihin. Yhtenä esimerkkinä voidaan mainita Musician – niminen luokka, joka olisi oletusarvoisesti yhdistetty muusikko-nimiseen tietokantataulukkoon.

tavanomainen kokoonpano on ajansäästäjä, ja monesti se toimii riittävän hyvin. On myös mahdollista muokata JPA kokoonpano. Esimerkkinä voisi käyttää yhteisen parlamentaarisen edustajakokouksen @Table annotaatiota, jossa määriteltäisiin taulukko, johon Musician Luokka tulisi tallentaa.

listaus 5. JPA: n @Table annotation

@Entity@Table(name="musician")public class Musician { // ..class body}

Listing 5 kertoo, että JPA säilyttää entiteetin (Musician class) musician taulukko.

ensisijainen avain

JPA: ssa ensisijainen avain on kenttä, jota käytetään kunkin objektin yksilöimiseen tietokannassa. Ensisijainen avain on hyödyllinen viitattaessa ja liitettäessä objekteja muihin entiteetteihin. Kun tallennat objektin taulukkoon, määrität myös kentän, jota käytetään sen ensisijaisena avaimena.

listauksessa 6 kerrotaan, mitä kenttää Musician’s primary key.

listaus 6. Määrittelemällä ensisijaisen avaimen

@Entitypublic class Musician { @Id private Long id;

tässä tapauksessa olemme käyttäneet yhteisen parlamentaarisen edustajakokouksen @Id annotaatiota id kenttä Musician’s ensisijainen avain. Oletusarvoisesti tämä määritys olettaa, että ensisijainen avain asetetaan tietokantaan-esimerkiksi, kun kenttä asetetaan automaattiseen lisäykseen pöydällä.

JPA tukee muita strategioita olion ensisijaisen avaimen generoimiseksi. Siinä on myös merkintöjä yksittäisten kenttien nimien muuttamiseksi. Yleisesti ottaen yhteinen parlamentaarinen edustajakokous on riittävän joustava mukautuakseen tarvittaviin pysyvyyskartoituksiin.

CRUD-operaatiot

kun olet kartoittanut luokan tietokantataulukkoon ja määrittänyt sen ensisijaisen avaimen, sinulla on kaikki mitä tarvitset kyseisen luokan luomiseen, hakemiseen, poistamiseen ja päivittämiseen tietokannassa. Kutsuminen session.save() luo tai päivittää määritetyn luokan riippuen siitä, onko ensisijaisen avaimen kenttä nolla vai koskeeko se en olemassa olevaa entiteettiä. Kutsumalla entityManager.remove() poistetaan määritelty Luokka.

Entiteettisuhteet JPA: ssa

pelkkä primitiivisen kentän omaavan kappaleen jatkaminen on vain puolet yhtälöstä. Yhteisellä parlamentaarisella EDUSTAJAKOKOUKSELLA on myös valmiudet hallinnoida yhteisöjä suhteessa toisiinsa. Neljänlaiset oliosuhteet ovat mahdollisia sekä taulukoissa että esineissä:

  1. One-to-many
  2. Many-To-one
  3. Many-to-many
  4. One-to-one

jokainen suhdetyyppi kuvaa, miten jokin entiteetti liittyy muihin entiteetteihin. Esimerkiksi Musician entityllä voi olla yhdestä moneen suhde Performance, joka edustaa kokoelmaa kuten List tai Set.

Jos Musician sisälsi Band kentän, näiden entiteettien suhde saattoi olla moneen, mikä viittaa Musicians singlellä Band Luokka. (Olettaen, että jokainen muusikko esiintyy vain yhdessä yhtyeessä.)

Jos Musician sisälsi BandMates kentän, joka saattoi edustaa moninaista suhdetta muihin Musician entiteetteihin.

lopulta Musician saattaa olla yksi yhteen-suhde Quote entiteetti, jota käytetään esittämään kuuluisa sitaatti: Quote famousQuote = new Quote().

Määritellään suhdetyypit

JPA on merkinnät kunkin sen suhde kartoitus tyypit. Listaus 7 näyttää, miten Musician ja PerformanceS.

listaus 7. Huomautus yhdestä moneen-suhteelle

on huomattava, että @JoinColumn kertoo parlamentaariselle edustajakokoukselle, mikä tulostaulun sarake kartoittaa Musician kokonaisuuden. Jokainen esitys liitetään yhteen Musician, jota seurataan tässä sarakkeessa. Kun JPA lataa Musician tai Performance tietokantaan, se käyttää näitä tietoja objektikaavion palauttamiseen.

strategioiden hakeminen yhteisessä parlamentaarisessa edustajakokouksessa

sen lisäksi, että tiedetään, mihin liittyvät yhteisöt sijoitetaan tietokantaan, yhteisen parlamentaarisen edustajakokouksen on tiedettävä, miten ne halutaan ladata. Hakustrategiat kertovat JPA: lle, miten niihin liittyviä kokonaisuuksia Ladataan. Ladattaessa ja tallennettaessa objekteja yhteisen parlamentaarisen edustajakokouksen on kyettävä tarkentamaan, miten objektikaavioita käsitellään. Jos esimerkiksi Musician Luokka on bandMate kenttä (kuten listauksessa 7 näkyy), voi lataaminen george saattaa aiheuttaa koko Muusikkotaulukon lataamisen tietokannasta!

tarvitaan kykyä määritellä toisiinsa liittyvien kokonaisuuksien laiska kuormittaminen–tunnustaa tietenkin, että suhteet yhteisessä parlamentaarisessa edustajakokouksessa voivat olla innokkaita tai laiskoja. Voit muokata hakustrategioitasi huomautusten avulla, mutta parlamentaarisen edustajakokouksen oletusasetukset toimivat usein laatikosta käsin ilman muutoksia:

  1. One-to-many: Lazy
  2. Many-To-One: Eager
  3. One-to-many: Lazy

parlamentaarisen edustajakokouksen asennus ja asennus

päätämme tarkastelemalla pikaisesti yhteisen edustajakokouksen asentamista ja perustamista Java-sovelluksillesi. Tässä esittelyssä käytän Eclipselinkiä, yhteisen edustajakokouksen referenssitoteutusta.

yleinen tapa asentaa yhteinen parlamentaarinen edustajakokous on sisällyttää yhteisen edustajakokouksen tarjoaja projektiin. Listaus 8 näyttää, miten Sisällyttäisit Eclipselinkin riippuvuutena Maven pom.xml – tiedostoon.

listaus 8. Sisällytä EclipseLink Maven-riippuvuutena

org.eclipse.persistenceeclipselink2.5.0-RC1

tarvitset myös ajurin tietokantaasi, kuten listaus 9 osoittaa.

listaus 9. Maven-riippuvuus MySQL-liittimelle

mysqlmysql-connector-java5.1.32

Seuraavaksi sinun on kerrottava järjestelmälle tietokannastasi ja tarjoajastasi. Tämä tapahtuu persistence.xml tiedostossa, kuten listauksessa 10 näkyy.

listaus 10. Pysyvyys.xml

on olemassa muita tapoja antaa tämä tieto järjestelmälle, myös ohjelmallisesti. Suosittelen persistence.xml – tiedoston käyttöä, koska riippuvuuksien tallentaminen tällä tavalla tekee sovelluksen päivittämisestä erittäin helppoa koodia muuttamatta.

yhteisen parlamentaarisen edustajakokouksen Jousikonfiguraatio

jousen käyttäminen helpottaa huomattavasti yhteisen edustajakokouksen integroimista sovellukseesi. Esimerkiksi asettamalla @SpringBootApplication huomautus sovelluksen otsikossa ohjeistaa Spring automaattisesti etsimään luokkia ja pistämään EntityManager tarpeen mukaan määrittämäsi kokoonpanon perusteella.

listaus 11 näyttää riippuvuudet, jotka sisällytetään, jos haluat kevään yhteisen edustajakokouksen tuen hakemuksellesi.

listaus 11. Lisäämällä Spring JPA tuki Maven

johtopäätös

jokaisen sovelluksen, joka käsittelee tietokantaa, olisi määriteltävä sovelluskerros, jonka ainoana tarkoituksena on eristää pysyvyyskoodi. Kuten olet nähnyt tässä artikkelissa, Java Persistence API esittelee erilaisia ominaisuuksia ja tukea Java object persistence. Yksinkertaiset sovellukset eivät välttämättä vaadi kaikkia yhteisen parlamentaarisen edustajakokouksen ominaisuuksia, ja joissakin tapauksissa kehyksen määrittämisen yleiskustannukset eivät välttämättä ole ansaittuja. Kun sovellus kasvaa, kuitenkin, JPA: n rakenne ja kapselointi todella ansaitsevat pitää. JPA: n käyttö pitää objektikoodin yksinkertaisena ja tarjoaa tavanomaisen kehyksen tietojen käyttämiseen Java-sovelluksissa.

lisätietoja Java Persistence API: sta ja siihen liittyvistä teknologioista

  • mikä on JDBC? Johdatus Java-Tietokantayhteyteen: Tutustu Javan matalan tason API: iin, jolla voit muodostaa yhteyden tietokantaan, antaa SQL-kyselyjä ja paljon muuta.
  • Java persistence with JPA and Hibernate, Part 1: Entities and relationships: Get started modeling entities and relationships with Java 8 and Hibernate ORM.
  • Java persistence with JPA and Hibernate, Part 2: Käytännön käytännössä mallinnus monia-to-monet suhteet ja perintö suhteita Java 8 ja Hibernate ORM.
  • Implementing state-dependent behavior: a classic introduction to the state pattern and state dependency in Java.
  • Eager / Lazy Loading in Horrorate: How to apply Inter and lazy loading in Horrorate.
  • JPA 2.2 tuo mukanaan joitakin erittäin odotettuja muutoksia: yleiskuvan spesifikaatiopäivityksistä YPA 2.2: ssa, mukaan lukien parannukset CDI: hen, parempi yhdenmukaisuus päivämäärän ja ajan API: n kanssa sekä tuki @Repeatable – merkinnöille.
  • pitäisikö sinun käyttää JPA: ta seuraavassa projektissasi?: Avainkysymyksiä, jotka voivat auttaa sinua päättämään.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *