Forskellen mellem @JoinColumn og mappedBy

1. Introduktion

JPA-forhold kan være enten ensrettet eller tovejs. Det betyder simpelthen, at vi kan modellere dem som en attribut på nøjagtigt en af ​​de tilknyttede enheder eller begge dele.

Definition af retningen for forholdet mellem enheder har ingen indflydelse på databasekortlægningen. Det definerer kun de retninger, som vi bruger dette forhold i vores domænemodel.

For et tovejsforhold definerer vi normalt:

  • ejersiden
  • omvendt eller den henvisende side

Det @JoinColumn annotation hjælper os med at specificere den kolonne, vi vil bruge til at deltage i en enhedsforening eller elementsamling. På den anden side er kortlagt af attribut bruges til at definere den henvisende side (ikke-ejende side) af forholdet.

I denne hurtige vejledning ser vi på forskellen på @JoinColumn og kortlagt afi JPA. Vi præsenterer også, hvordan du bruger dem i en en-til-mange-forening.

2. Første opsætning

For at følge med denne vejledning, lad os sige, at vi har to enheder: Medarbejder og E-mail.

Det er klart, at en medarbejder kan have flere e-mail-adresser. En given e-mail-adresse kan dog tilhøre nøjagtigt en enkelt medarbejder.

Det betyder, at de deler en en-til-mange-forening:

Også i vores RDBMS-model har vi en fremmed nøgle Medarbejder-ID i vores E-mail enhed, der henviser til id attribut for en Medarbejder.

3. @JoinColumn Kommentar

I et forhold mellem én og mange / mange-til-en, ejersiden er normalt defineret på 'mange' side af forholdet. Det er normalt den side, der ejer den udenlandske nøgle.

Det @JoinColumn annotation definerer, at faktisk fysisk kortlægning på ejersiden:

@Entity offentlig klasse E-mail {@Id @GeneratedValue (strategi = GenerationType.AUTO) privat Lang id; @ManyToOne (fetch = FetchType.LAZY) @JoinColumn (navn = "medarbejder_id") privat medarbejdermedarbejder; // ...}

Det betyder simpelthen, at vores E-mail enhed har en udenlandsk nøglekolonne navngivet Medarbejder-ID der henviser til den primære attribut id af vores Medarbejder enhed.

4. kortlagt af Attribut

Når vi har defineret den ejende side af forholdet, har Hibernate allerede alle de oplysninger, der er nødvendige for at kortlægge dette forhold i vores database. For at gøre denne tilknytning tovejs er alt, hvad vi skal gøre, at definere henvisningssiden. Den omvendte eller henvisende side kortlægges simpelthen til ejersiden.

Vi kan nemt bruge kortlagt af attribut for @OneToMany kommentar til at gøre det. Så lad os definere vores Medarbejder enhed:

@Entity offentlig klasse Medarbejder {@Id @GeneratedValue (strategi = GenerationType.AUTO) privat Lang id; @OneToMany (fetch = FetchType.LAZY, mappedBy = "medarbejder") private e-mails med listen; // ...}

Her, værdien af kortlagt af er navnet på attributten for tilknytningskortlægning på ejersiden. Med dette har vi nu etableret en tovejsforbindelse mellem vores Medarbejder og E-mail enheder.

5. Konklusion

I denne vejledning så vi på forskellen mellem @JoinColumn og kortlagt af og hvordan man bruger dem i et en-til-to tovejs forhold.

Det @JoinColumn annotation definerer den faktiske fysiske kortlægning på ejersiden. På den anden side defineres henvisningssiden ved hjælp af kortlagt af attribut for @OneToMany kommentar.

Som normalt er kildekoden tilgængelig på Github.