Hibernate Many to Many Annotation Tutorial

1. Introduksjon

I denne raske opplæringen vil vi se raskt på hvordan @ManyToMany merknader kan brukes til å spesifisere denne typen forhold i dvalemodus.

2. Et typisk eksempel

La oss starte med et enkelt enhetsforholdsdiagram - som viser mange-til-mange-tilknytningen mellom to enheter ansatt og prosjekt:

I dette scenariet, gitt ansatt kan tildeles flere prosjekter og a prosjekt kan ha flere ansatte som jobber for det, noe som fører til en mange-til-mange-tilknytning mellom de to.

Vi har en ansatt bord med Ansatt ID som hovednøkkel og a prosjekt bord med prosjekt_id som hovednøkkel. Et sammenføyningsbord ansatt_prosjekt kreves her for å koble begge sider.

3. Databaseoppsett

La oss anta at vi har en allerede opprettet database med navnet vår_dvale_mange_til_mange.

Vi må også lage ansatt og prosjekt bord sammen med ansatt_prosjekt bli med på bordet med Ansatt ID og prosjekt_id som utenlandske nøkler:

OPPRETT TABELL `ansatt` (` ansatt_id` int (11) IKKE NULL AUTO_INCREMENT, `fornavn` varchar (50) STANDARD NULL,` etternavn` varchar (50) STANDARD NULL, PRIMÆR NØKKEL (`ansatt_id`)) MOTOR = InnoDB AUTO_INCREMENT = 17 STANDARD CHARSET = utf8; CREATE TABLE `project` (` project_id` int (11) NOT NULL AUTO_INCREMENT, `title` varchar (50) DEFAULT NULL, PRIMARY KEY (` project_id`)) MOTOR = InnoDB AUTO_INCREMENT = 18 STANDARD CHARSET = utf8; OPPRETT TABELL `medarbeider_prosjekt` (` ansatt_id` int (11) IKKE NULL, `prosjekt_id` int (11) IKKE NULL, PRIMÆR NØKKEL (` ansatt_id`, `prosjekt_id`), Nøkkel` prosjekt_id` (`prosjekt_id`), KONSTRAINT` medarbeider_projekt_ibfk_1 `UTENLANDSK Nøkkel (` ansatt_id`) REFERANSER `ansatt` (` ansatt_id`), KONSTRAINT `ansatt_projekt_ibfk_2` UTENLANDSK Nøkkel (` prosjekt_id`) REFERANSER `prosjekt` (` prosjekt_id`)) MOTOR = InnoDB DEFAULT CHARSET = 

Når databasen er satt opp, vil neste trinn være utarbeidelse av Maven-avhengigheter og dvalemodus-konfigurasjon. For informasjon om dette, se artikkelen om Guide to Hibernate4 with Spring

4. Modellklassene

Modellklassene Ansatt og Prosjekt må opprettes med JPA-merknader:

@Entity @Table (name = "Employee") offentlig klasse Ansatt {// ... @ManyToMany (cascade = {CascadeType.ALL}) @JoinTable (name = "Employee_Project", joinColumns = {@JoinColumn (name = "ansatte_id) ")}, inverseJoinColumn = {@JoinColumn (name =" project_id ")}) Sett prosjekter = nytt HashSet (); // standard konstruktør / getters / setters}
@Entity @Table (name = "Project") offentlig klasse Prosjekt {// ... @ManyToMany (mappedBy = "projects") private Sett ansatte = nye HashSet (); // standard konstruktører / getters / setters}

Som vi kan se, begge Ansatt klasse og Prosjekt klasser refererer til hverandre, noe som betyr at forbindelsen mellom dem er toveis.

For å kartlegge en mange-til-mange forening bruker vi @ManyToMany, @JoinTable og @JoinColumn kommentarer. La oss se nærmere på dem.

De @ManyToMany kommentar brukes i begge klasser for å skape mange-til-mange-forholdet mellom enhetene.

Denne assosiasjonen har to sider, dvs. eiersiden og den omvendte siden. I vårt eksempel er eiersiden Ansatt så blir sammenføyningstabellen spesifisert på eiersiden ved å bruke @JoinTable kommentar i Ansatt klasse. De @JoinTable brukes til å definere sammenkobling / lenketabellen. I dette tilfellet er det Ansatt_Prosjekt.

De @JoinColumn kommentar brukes til å spesifisere sammenføyning / lenke kolonne med hovedtabellen. Her er sammenføyningskolonnen Ansatt ID og prosjekt_id er den inverse sammenføyningskolonnen siden Prosjekt er på den omvendte siden av forholdet.

I Prosjekt klasse, den kartlagt av attributt brukes i @ManyToMany kommentar for å indikere at ansatte samlingen er kartlagt av prosjekter samling av eiersiden.

5. Utførelse

For å se mange-til-mange-merknader i aksjon, kan vi skrive følgende JUnit-test:

offentlig klasse HibernateManyToManyAnnotationMainIntegrationTest {private static SessionFactory sessionFactory; privat øktøkt; // ... @Test public void givenData_whenInsert_thenCreatesMtoMrelationship () {String [] employeeData = {"Peter Oven", "Allan Norman"}; String [] projectData = {"IT Project", "Networking Project"}; Sett prosjekter = nytt HashSet (); for (String proj: projectData) {projects.add (nytt prosjekt (proj)); } for (String emp: employeeData) {Ansatt ansatt = ny ansatt (emp.split ("") [0], emp.split ("") [1]); assertEquals (0, ansatte.getProjekter (). størrelse ()); medarbeider.setProsjekter (prosjekter); session.persist (ansatt); assertNotNull (ansatt); }} @Test offentlig ugyldig givenSession_whenRead_thenReturnsMtoMdata () {@SuppressWarnings ("unchecked") Liste medarbeiderListe = session.createQuery ("FRA ansatt") .liste (); assertNotNull (medarbeiderliste); for (Ansatt ansatt: ansattListe) {assertNotNull (ansatt.getProjects ()); }} // ...}

Vi kan se forholdet mellom mange og mange mellom de to enhetene som er opprettet i databasen: ansatt, prosjekt, og ansatt_prosjekt tabeller med eksempeldata som representerer forholdet.

6. Konklusjon

I denne opplæringen så vi hvordan du oppretter kartlegginger ved hjelp av Hibernates mange-til-mange-merknader, som er en mer praktisk motpart sammenlignet med å lage XML-kartfiler.

Kildekoden til denne veiledningen finner du på GitHub.


$config[zx-auto] not found$config[zx-overlay] not found