Dvale mange til mange annotationsvejledninger

1. Introduktion

I denne hurtige vejledning ser vi hurtigt på, hvordan @ManyToMany annotation kan bruges til at specificere denne type forhold i dvale.

2. Et typisk eksempel

Lad os starte med et simpelt diagram for enhedsforhold - som viser den mange-til-mange-forbindelse mellem to enheder medarbejder og projekt:

I dette scenarie, enhver given medarbejder kan tildeles flere projekter og en projekt kan have flere medarbejdere, der arbejder for det, hvilket fører til en mange-til-mange-forbindelse mellem de to.

Vi har en medarbejder bord med Medarbejder-ID som sin primære nøgle og en projekt bord med projekt_id som sin primære nøgle. Et sammenføjningsbord medarbejderprojekt kræves her for at forbinde begge sider.

3. Databaseopsætning

Lad os antage, at vi har en allerede oprettet database med navnet forårsdvale_mange_til_mange.

Vi er også nødt til at skabe medarbejder og projekt tabeller sammen med medarbejderprojekt slutte sig til bordet med Medarbejder-ID og projekt_id som udenlandske nøgler:

Opret TABEL `medarbejder` (` medarbejder_id` int (11) IKKE NULL AUTO_INCREMENT, `fornavn` varchar (50) STANDARD NULL,` efternavn` varchar (50) STANDARD NULL, PRIMÆR NØGLE (`medarbejder_id`)) MOTOR = InnoDB AUTO_INCREMENT = 17 STANDARD CHARSET = utf8; OPRET TABEL `projekt` (` projekt_id` int (11) IKKE NULL AUTO_INCREMENT, `titel` varchar (50) STANDARD NULL, PRIMÆR NØGLE (` projekt_id`)) MOTOR = InnoDB AUTO_INCREMENT = 18 STANDARD TEGN = utf8; Opret TABEL `medarbejder_projekt` (` medarbejder_id` int (11) IKKE NULL, `projekt_id` int (11) IKKE NULL, PRIMÆR NØGLE (` medarbejder_id`, `projekt_id`), KEY` projekt_id` (`projekt_id`), KONSTRAINT medarbejder_projekt_ibfk_1` UDENLANDSK KEY (`medarbejder_id`) REFERENCER` medarbejder` (`medarbejder_id`), KONTRAST` medarbejder_projekt_ibfk_2` UDENLANDSK NØGLE (`projekt_id`) REFERENCER` projekt` (`projekt_id`)) MOTOR = InnoDB DEFAULT CHARSET = 

Når databasen er oprettet, er næste trin forberedelse af Maven-afhængigheder og dvale-konfiguration. For information om dette henvises til artiklen om Guide til Hibernate4 med Spring

4. Modelklasser

Modelklasser Medarbejder og Projekt skal oprettes med JPA-kommentarer:

@Entity @Table (name = "Medarbejder") offentlig klasse Medarbejder {// ... @ManyToMany (cascade = {CascadeType.ALL}) @JoinTable (name = "Employee_Project", joinColumns = {@JoinColumn (name = "employee_id) ")}, inverseJoinColumns = {@JoinColumn (name =" project_id ")}) Indstil projekter = nyt HashSet (); // standard konstruktør / getters / setters}
@Entity @Table (name = "Project") offentlig klasse Projekt {// ... @ManyToMany (mappedBy = "projekter") private Sæt medarbejdere = nye HashSet (); // standard konstruktører / getters / setters}

Som vi kan se, både den Medarbejder klasse og Projekt klasser henviser til hinanden, hvilket betyder, at forbindelsen mellem dem er tovejs.

For at kortlægge en mange-til-mange forening bruger vi @ManyToMany, @JoinTable og @JoinColumn kommentarer. Lad os se nærmere på dem.

Det @ManyToMany annotering bruges i begge klasser til at skabe det mange-til-mange forhold mellem enhederne.

Denne forening har to sider, dvs. ejersiden og den omvendte side. I vores eksempel er ejersiden Medarbejder så sammenføjningstabellen specificeres på ejersiden ved hjælp af @JoinTable kommentar i Medarbejder klasse. Det @JoinTable bruges til at definere sammenføjning / link-tabellen. I dette tilfælde er det Medarbejder_Projekt.

Det @JoinColumn annotering bruges til at specificere sammenkædning / sammenkædningskolonnen med hovedtabellen. Her er sammenføjningskolonnen Medarbejder-ID og projekt_id er den inverse sammenføjningskolonne siden Projekt er på den indvendige side af forholdet.

I Projekt klasse, den kortlagt af attribut bruges i @ManyToMany kommentar for at angive, at medarbejdere samlingen kortlægges af projekter samling af ejersiden.

5. Udførelse

For at se den mange-til-mange-kommentar i aktion kan vi skrive følgende JUnit-test:

offentlig klasse HibernateManyToManyAnnotationMainIntegrationTest {privat statisk SessionFactory sessionFactory; privat session session; // ... @Test offentligt ugyldigt givenData_whenInsert_thenCreatesMtoMrelationship () {String [] employeeData = {"Peter Oven", "Allan Norman"}; Streng [] projectData = {"IT-projekt", "Netværksprojekt"}; Indstil projekter = nyt HashSet (); for (String proj: projectData) {projects.add (nyt projekt (proj)); } for (String emp: employeeData) {Medarbejdermedarbejder = ny medarbejder (emp.split ("") [0], emp.split ("") [1]); assertEquals (0, medarbejder.getProjects (). størrelse ()); medarbejder.setProjekter (projekter); session.persist (medarbejder); assertNotNull (medarbejder); }} @Test offentlig ugyldighed givenSession_whenRead_thenReturnsMtoMdata () {@SuppressWarnings ("unchecked") Liste medarbejderliste = session.createQuery ("FRA medarbejder") .liste (); assertNotNull (medarbejderliste); for (Medarbejdermedarbejder: medarbejderliste) {assertNotNull (medarbejder.getProjects ()); }} // ...}

Vi kan se det mange-til-mange forhold mellem de to enheder oprettet i databasen: medarbejder, projektog medarbejderprojekt tabeller med eksempeldata, der repræsenterer forholdet.

6. Konklusion

I denne vejledning så vi, hvordan man opretter tilknytninger ved hjælp af Hibernates mange-til-mange-kommentarer, hvilket er en mere bekvem modstykke sammenlignet med oprettelse af XML-kortlægningsfiler.

Kildekoden til denne vejledning kan findes på GitHub.