Articles

Hibernate One To Many Annotation Tutorial

Introduksjon

denne raske Hibernate opplæringen vil ta oss gjennom et eksempel på en en-til-mange kartlegging ved HJELP AV jpa merknader, et alternativ TIL XML.

Vi vil også lære hva toveis relasjoner er, hvordan de kan skape uoverensstemmelser, og hvordan ideen om eierskap kan hjelpe.

Videre lesing:

Spring Boot med Hibernate

en rask, praktisk intro til å integrere Spring Boot og Hibernate / Jpa.
Les mer →

En Oversikt over Identifikatorer i Dvalemodus/JPA

Lær hvordan du kartlegger enhetsidentifikatorer med Dvalemodus.
les mer →

Beskrivelse

enkelt sagt betyr en-til-mange kartlegging at en rad i et bord er kartlagt til flere rader i et annet bord.

La oss se på følgende enhetsrelasjonsdiagram for å se en en-til-mange-forening:

i dette eksemplet implementerer vi et handlekurvsystem der vi har et bord for hver vogn og et annet bord for hvert element. En vogn kan ha mange elementer, så her har vi en en-til-mange kartlegging.

måten dette fungerer på databasenivå, er at vi har en cart_id som primærnøkkel i handlevogntabellen og også en cart_id som sekundærnøkkel i varer.

måten vi gjør det i kode er med @OneToMany.

la oss kartlegge Handlevognklassen Til Objektobjektet på en måte som gjenspeiler forholdet i databasen:

public class Cart { //... @OneToMany(mappedBy="cart") private Set<Items> items; //...}

Vi kan også legge til en referanse Til Handlevogn I Elementer ved hjelp av @ManyToOne, noe som gjør dette til et toveis forhold. Toveis betyr at vi er i stand til å få tilgang til elementer fra vognene, og også vognene fra elementer.mappedBy-egenskapen er det vi bruker for å fortelle Hibernate hvilken variabel vi bruker til å representere foreldreklassen i vår barneklasse.

følgende teknologier og biblioteker brukes for å utvikle Et Eksempel Dvalemodus program som implementerer en-til-mange forening:

  • JDK 1.8 eller nyere
  • Maven 3 Eller nyere
  • H2 database

Oppsett

3.1. Database Setup

Nedenfor er vår database script For Handlevogn og Elementer tabeller. Vi bruker fremmednøkkelbegrensningen for en-til-mange kartlegging:

vårt databaseoppsett er klart, så la oss fortsette å lage Hibernate-eksempelprosjektet.

3.2. Maven Avhengigheter

Vi vil da legge Til Hibernate Og H2 driver avhengigheter til vår pom.xml-fil. Hibernate dependency bruker jboss logging, og det blir automatisk lagt til som transitive avhengigheter:

  • Hibernate versjon 5.2.7.Endelig
  • H2 driver versjon 1.4.197

vennligst besøk Maven central repository for de nyeste versjonene Av Hibernate og H2-avhengighetene.

3.3. Hibernate Konfigurasjon

her er Konfigurasjonen Av Hibernate:

3.4. HibernateAnnotationUtil Class

Med HibernateAnnotationUtil-klassen trenger vi bare å referere til Den nye Hibernate konfigurasjonsfilen:

Modellene

kartleggingsrelaterte konfigurasjoner vil bli gjort ved HJELP AV jpa-merknader i modellklassene:

@Entity@Table(name="CART")public class Cart { //... @OneToMany(mappedBy="cart") private Set<Items> items; // getters and setters}

vær oppmerksom på at @OneToMany-merknaden brukes til å definere egenskapen i Elementklassen som skal brukes til å kartlegge mappedby-variabelen. Det er derfor vi har en eiendom som heter «cart» i Items-klassen:

Det er også viktig å merke seg at @ManyToOne-merknaden er knyttet til Cart class-variabelen. @ JoinColumn annotasjon refererer til den tilordnede kolonnen.

I Aksjon

i testprogrammet lager vi en klasse med en hoved() metode for Å få Dvalemodus, og lagrer modellobjektene i databasen som implementerer en-til-mange-foreningen:

dette er resultatet av testprogrammet vårt:

@ManyToOne-Merknaden

Som vi har sett i seksjon 2, kan vi spesifisere en mange-til-en-forhold ved Hjelp Av @manytoone-merknaden. En mange-til-en-tilordning betyr at mange forekomster av denne enheten er tilordnet en forekomst av en annen enhet-mange elementer i en handlevogn.

@ManyToOne-merknaden lar Oss også opprette toveisrelasjoner. Vi vil dekke dette i detalj i de neste par underavsnittene.

6.1. Inkonsekvenser og Eierskap

nå, Hvis Cart refererte Elementer, Men Elementer ikke i sin tur refererte Vogn, ville forholdet vårt være ensrettet. Objektene vil også ha en naturlig konsistens.

i vårt tilfelle er forholdet toveis, noe som gir mulighet for inkonsekvens.

La oss forestille oss en situasjon der en utvikler ønsker å legge item1 til handlevogn og item2 til cart2, men gjør en feil slik at referansene mellom cart2 og item2 bli inkonsekvent:

som vist ovenfor, item2 referanser cart2, mens cart2 ikke referere item2, og det er dårlig.

Hvordan Skal Dvalemodus lagre element2 til databasen? Vil item2 utenlandsk nøkkel referanse cart1 eller cart2?

vi løser denne tvetydigheten ved å bruke ideen om en eierside av forholdet; referanser som tilhører eiersiden har forrang og lagres i databasen.

6.2. Elementer som Eiersiden

som angitt I jpa-spesifikasjonen under avsnitt 2.9, er det en god praksis å markere mange til en side som eiersiden.

Med Andre ord Vil Elementer være eiersiden og Vognen den motsatte siden, noe som er akkurat det vi gjorde tidligere.

så hvordan har vi oppnådd dette?

ved å inkludere mappedBy-attributtet i Vognklassen merker vi det som omvendt.

samtidig merker Vi Også Elementene.cart feltet med @ ManyToOne, noe Som gjør Elementer eie side.

Går tilbake til vårt» inkonsekvens » eksempel, Nå Hibernate vet at item2 referanse er viktigere og vil lagre item2 referanse til databasen.

la oss sjekke resultatet:

item1 ID=1, Foreign Key Cart ID=1item2 ID=2, Foreign Key Cart ID=2

selv om vognreferanser item2 i vår tekstutdrag, er item2 referanse til cart2 lagret i databasen.

6.3. Cart Som Eiersiden

det er også mulig å merke en-til-mange-siden som eiersiden, og mange-til-en-siden som omvendt.

Selv om dette ikke er en anbefalt praksis, la oss gå videre og gi det et forsøk.

kodebiten nedenfor viser implementeringen av en-til-mange-siden som eiersiden:

Legg merke til hvordan vi fjernet mappedBy-elementet og sett mange-til-en @JoinColumn som innsettbar og oppdaterbar til falsk.

hvis vi kjører den samme koden, vil resultatet bli motsatt:

item1 ID=1, Foreign Key Cart ID=1item2 ID=2, Foreign Key Cart ID=1

som vist ovenfor, nå item2 tilhører cart.

Konklusjon

Vi har sett hvor enkelt det er å implementere en-til-mange-forholdet med Hibernate ORM og H2-databasen ved HJELP AV jpa-merknader.

I Tillegg lærte Vi om toveisforhold og hvordan man implementerer begrepet en eierside.