Výukový program hibernácie mnohých až mnohých anotácií

1. Úvod

V tomto rýchlom návode sa rýchlo pozrieme na to, ako @ManyToMany na určenie tohto typu vzťahov v režime dlhodobého spánku je možné použiť anotáciu.

2. Typický príklad

Začnime jednoduchým diagramom vzťahov medzi entitami - ktorý zobrazuje asociáciu mnohých medzi dvoma entitami zamestnanec a projekt:

V tomto scenári akýkoľvek zamestnanec je možné priradiť k viacerým projektom a projekt môže pre ňu pracovať viac zamestnancov, čo vedie k spojeniu medzi mnohými.

Máme zamestnanec stôl s zamestnanecké ID ako jeho primárny kľúč a a projekt stôl s project_id ako jeho primárny kľúč. Spojovacia tabuľka zamestnanec_projekt je tu potrebné na spojenie oboch strán.

3. Nastavenie databázy

Predpokladajme, že máme už vytvorenú databázu s názvom spring_hibernate_many_to_many.

Musíme tiež vytvoriť zamestnanec a projekt stoly spolu s zamestnanec_projekt spojiť stôl s zamestnanecké ID a project_id ako cudzie kľúče:

CREATE TABLE `employee` (` employee_id` int (11) NOT NULL AUTO_INCREMENT, `first_name` varchar (50) DEFAULT NULL,` last_name` varchar (50) DEFAULT NULL, PRIMARY KEY (`employee_id`)) ENGINE = InnoDB AUTO_INCREMENT = 17 VÝCHOZÍ CHARSET = utf8; CREATE TABLE `project` (` project_id` int (11) NOT NULL AUTO_INCREMENT, `title` varchar (50) DEFAULT NULL, PRIMARY KEY (` project_id`)) ENGINE = InnoDB AUTO_INCREMENT = 18 DEFAULT CHARSET = utf8; CREATE TABLE `employee_project` (` employee_id` int (11) NOT NULL, `project_id` int (11) NOT NULL, PRIMARY KEY (` employee_id`, `project_id`), KEY` project_id` (`project_id`), CONSTRAINT` employee_project_ibfk_1` FOREIGN KEY (`employee_id`) REFERENCES` employee` (`employee_id`), CONSTRAINT` employee_project_ibfk_2` FOREIGN KEY (`project_id`) REFERENCES` project` (`project_id`)) ENGINE = InnoDB DEFAULT CHAR 

Po nastavení databázy bude ďalším krokom príprava závislostí Maven a konfigurácia režimu dlhodobého spánku. Informácie o tejto téme nájdete v článku Sprievodca režimom Hibernate4 s jarou

4. Modelové triedy

Modelové triedy Zamestnanec a Projekt je potrebné vytvoriť s anotáciami JPA:

@Entity @Table (name = "Employee") verejná trieda Employee {// ... @ManyToMany (cascade = {CascadeType.ALL}) @JoinTable (name = "Employee_Project", joinColumns = {@JoinColumn (name = "employee_id) ")}, inverseJoinColumns = {@JoinColumn (name =" project_id ")}) Nastaviť projekty = nový HashSet (); // štandardný konštruktor / getre / setre}
@Entity @Table (name = "Projekt") verejná trieda Projekt {// ... @ManyToMany (mappedBy = "projects") súkromná sada zamestnancov = nová HashSet (); // štandardné konštruktory / getre / setre}

Ako vidíme, obaja Zamestnanec triedy a Projekt triedy na seba odkazujú, čo znamená, že spojenie medzi nimi je obojsmerné.

Aby sme zmapovali asociáciu mnohých proti mnohým, používame @ManyToMany, @JoinTable a @JoinColumn anotácie. Pozrime sa na ne bližšie.

The @ManyToMany anotácia sa v obidvoch triedach používa na vytvorenie vzájomného vzťahu medzi entitami.

Toto združenie má dve strany, t.j. vlastniacu stranu a inverznú stranu. V našom príklade je vlastniaca strana Zamestnanec takže spojovacia tabuľka je špecifikovaná na strane, ktorá ju vlastní, pomocou @JoinTable anotácia v Zamestnanec trieda. The @JoinTable sa používa na definovanie tabuľky spojenia / odkazu. V takom prípade to je Zamestnanec_Projekt.

The @JoinColumn anotácia sa používa na určenie stĺpca spojenia / prepojenia s hlavnou tabuľkou. Tu je stĺpec spojenia zamestnanecké ID a project_id je stĺpec inverzného spojenia od Projekt je na opačnej strane vzťahu.

V Projekt triedy, mappedBy atribút sa používa v @ManyToMany anotácia označujúca, že zamestnancov zbierka je mapovaná projektov zbierka na strane vlastníka.

5. Exekúcia

Aby sme videli anotáciu typu many-to-many v akcii, môžeme napísať nasledujúci test JUnit:

verejná trieda HibernateManyToManyAnnotationMainIntegrationTest {private static SessionFactory sessionFactory; relácia súkromnej relácie; // ... @Test public void givenData_whenInsert_thenCreatesMtoMrelationship () {String [] employeeData = {"Peter Oven", "Allan Norman"}; Reťazec [] projectData = {"IT projekt", "Sieťový projekt"}; Nastaviť projekty = nový HashSet (); pre (String proj: projectData) {projects.add (nový Project (proj)); } for (String emp: employeeData) {Employee employee = new Employee (emp.split ("") [0], emp.split ("") [1]); assertEquals (0, employee.getProjects (). size ()); employee.setProjects (projects); session.persist (zamestnanec); assertNotNull (zamestnanec); }} @Test public void givenSession_whenRead_thenReturnsMtoMdata () {@SuppressWarnings ("nezaškrtnuté") List employeeList = session.createQuery ("FROM Employee") .list (); assertNotNull (employeeList); pre (Zamestnanec zamestnanec: employeeList) {assertNotNull (employee.getProjects ()); }} // ...}

Vidíme vzťah medzi mnohými medzi dvoma entitami vytvorenými v databáze: zamestnanec, projekta zamestnanec_projekt tabuľky so vzorovými údajmi predstavujúcimi vzťah.

6. Záver

V tomto tutoriáli sme videli, ako vytvoriť mapovania pomocou poznámok typu Hibernate typu many to many, čo je v porovnaní s vytváraním súborov mapovania XML pohodlnejší náprotivok.

Zdrojový kód tohto tutoriálu nájdete na GitHub.


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