Hibernate One to One Mapping Annotation Example

Jos työskentelemme minkä tahansa hibernate-sovelluksen parissa tai aiomme työskennellä minkä tahansa parissa tulevaisuudessa, voit helposti ymmärtää sovelluksen useiden entiteettien väliset one-to-one-suhteet. Tässä hibernate yksi yhteen -kartoitusesimerkissä käsittelemme 4 eri variaatiota.

Table of ContentsVarious supported techniques for one to one mapping1. Using foreign key association2. Using join table3. Using shared primary key4. @MapsId

Tässä hibernate yksi yhteen -kartoitusesimerkissä laajennan hibernate hello world -esimerkkiä varten kirjoitettua esimerkkiä. Meillä on tässä kaksi oliota: Employee ja Account.

Yhdellä työntekijällä voi olla vain yksi tili. Vastaavasti tili liittyy vain yhteen työntekijään. Kyseessä on yksi yhteen -suhde tässä esimerkissä.

Vaihtelevia tuettuja tekniikoita

Hibernatessa on 3 tapaa luoda yksi yhteen -suhteita kahden entiteetin välille. Kummallakin tavalla meidän on käytettävä @OneToOne-annotaatiota.

  1. Ensimmäinen tekniikka on yleisimmin käytetty ja se käyttää vierasavainsaraketta yhdessä taulussa.
  2. Toinen tekniikka käyttää melko tunnettua ratkaisua, jossa on kolmas taulukko kahden ensimmäisen taulukon välisen kartoituksen tallentamiseen.
  3. Kolmas tekniikka on jotain uutta, joka käyttää yhteistä ensisijaisen avaimen arvoa molemmissa taulukoissa.

Hibernate one to one -mapping with foreign key association

Tällaisessa assosioinnissa luodaan vierasavainsarake omistajaentiteettiin. Jos esimerkiksi teemme EmployeeEntityn omistajaksi, luodaan ylimääräinen sarake "ACCOUNT_ID" Employee-tauluun. Tähän sarakkeeseen tallennetaan vierasavain Account-taulukkoon.

Taulukon rakenne on seuraavanlainen:

Tällaisen assosioinnin tekemiseen viitataan Account-olioon EmployeeEntity-luokassa seuraavalla tavalla:

@OneToOne@JoinColumn(name="ACCOUNT_ID")private AccountEntity account;

Liittymäsarake ilmoitetaan annotaatiolla @JoinColumn (Liittymäsarake-sarakkeelle)

JoinColumn (Liittymäsarake-sarakkeelle)

, joka on samanlainen kuin @Sarakkeelle). Sillä on vielä yksi parametri nimeltä referencedColumnName. Tämä parametri ilmoittaa kohdeolion sarakkeen, jota käytetään liitoksessa.

Jos omistajapuolella ei ole @JoinColumn-ilmoitusta, sovelletaan oletusarvoja. Omistajatauluun luodaan liitossarake(t), ja sen nimi on omistajapuolen suhteen nimen, _:n (alleviivaus) ja omistajapuolen ensisijaisen avainsarakkeen (-sarakkeiden) nimen ketjutus.

Kahdensuuntaisessa suhteessa toisen osapuolen (ja vain toisen) on oltava omistaja. Omistaja on vastuussa assosiaatiosarakkeen (-sarakkeiden) päivittämisestä. Jos halutaan ilmoittaa, että osapuoli ei ole vastuussa suhteesta, käytetään attribuuttia mappedBy. ’mappedBy’ viittaa omistajapuolen assosiaation ominaisuuden nimeen.

@OneToOne(mappedBy="account")private EmployeeEntity employee;

Aattribuutilla "mappedBy” ilmoitetaan, että se on riippuvainen omistajapuolen entiteetistä mappauksen osalta.

Testataan yllä olevat mappaukset ajettavassa koodissa:

Ylläolevan koodin ajaminen luo halutun skeeman tietokantaan ja suorittaa nämä SQL-kyselyt.

Voit tarkistaa tiedot ja kartoitukset molemmissa taulukoissa, kun suoritat yllä olevan ohjelman.

Hibernate one to one mapping with common join table

Tämä lähestymistapa ei ole meille kaikille uusi. Aloitetaan kohdennetusta DB-rakenteesta tässä tekniikassa.

Tässä tekniikassa tärkein käytettävä annotaatio on @JoinTable. Tätä annotaatiota käytetään uuden taulun nimen (pakollinen) ja molempien taulujen vierasavainten määrittelyyn. Katsotaan, miten sitä käytetään:

@JoinTable-annotaatiota käytetään EmployeeEntity-luokassa. Se ilmoittaa, että luodaan uusi taulukko EMPLOYEE_ACCOUNT, jossa on kaksi saraketta EMPLOYEE_ID (EMPLOYEE-taulukon ensisijainen avain) ja ACCOUNT_ID (ACCOUNT-taulukon ensisijainen avain).

Testaus edellä mainituista entiteeteistä tuottaa seuraavat SQL-kyselyt lokitiedostoihin:

Hibernate one to one mapping with shared primary key

Tässä tekniikassa hibernate varmistaa, että se käyttää yhteistä ensisijaisen avaimen arvoa molemmissa taulukoissa. Näin EmployeeEntity:n ensisijainen avain voidaan turvallisesti olettaa myös AccountEntity:n ensisijaiseksi avaimeksi.

Taulujen rakenne on seuraavanlainen:

Tässä lähestymistavassa @PrimaryKeyJoinColumn on tärkein käytettävä merkintä. Katsotaan, miten sitä käytetään.

@OneToOne(cascade = CascadeType.ALL)@PrimaryKeyJoinColumnprivate AccountEntity account;

Tässä AccountEntity-puolella se pysyy riippuvaisena omistajakokonaisuudesta kartoituksen osalta.

@OneToOne(mappedBy="account", cascade=CascadeType.ALL)private EmployeeEntity employee;

Testaus edellä mainituilla kokonaisuuksilla tuottaa lokitiedostoihin seuraavat SQL-kyselyt:

Hibernate one to one mapping with @MapsId

Tässä tekniikassa Hibernate olettaa, että sekä lähde- että kohdekokonaisuudet jakavat samat primääri-avaimen arvot.

Tässä lähestymistavassa @MapsId on tärkein käytettävä annotaatio. Katsotaan, miten sitä käytetään.

@Idprivate Integer employeeId;@OneToOne @MapsIdprivate AccountEntity account;

AccountEntity-puolella se pysyy riippuvaisena owner-oliosta mappingin osalta.

@Idprivate Integer accountId;

Testaus edellä mainituista olioista tuottaa seuraavat SQL-kyselyt lokitiedostoihin:

Vastaa

Sähköpostiosoitettasi ei julkaista.