Hibernálás Sok-sok Annotation Tutorial

1. Bemutatkozás

Ebben a gyors bemutatóban gyorsan áttekinthetjük, hogyan @ManyToMany az annotáció használható az ilyen típusú kapcsolatok hibernált módban történő megadására.

2. Tipikus példa

Kezdjük egy egyszerű entitáskapcsolati ábrával - amely megmutatja a sok-sok társulást két entitás között munkavállaló és projekt:

Ebben a forgatókönyvben bármelyik adott munkavállaló több projekthez rendelhető és a projekt lehet, hogy több alkalmazott dolgozik érte, ami a kettő között sok-sok társuláshoz vezet.

Van egy munkavállaló asztal munkavállalói azonosító mint elsődleges kulcsa és a projekt asztal project_id mint elsődleges kulcsa. Csatlakozási asztal alkalmazott_projekt szükséges itt mindkét oldal összekapcsolásához.

3. Adatbázis beállítása

Tegyük fel, hogy van egy már létrehozott adatbázisunk a névvel tavaszi_születik_ sok-sok-sok.

Létre kell hoznunk a munkavállaló és projekt táblázatok a alkalmazott_projekt csatlakozzon asztalhoz munkavállalói azonosító és project_id idegen kulcsként:

CREATE TABLE `alkalmazó` (` alkalmazott_azonosító int (11) NEM NULL AUTO_INCREMENT, `first_name` varchar (50) DEFAULT NULL,` last_name` varchar (50) DEFAULT NULL, PRIMARY KEY (`alkalmazott_id`)) ENGINE = InnoDB AUTO_INCREMENT = 17 DEFAULT 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 `alkalmazott_projekt` (` alkalmazott_azonosító int (11) NEM NULL, `project_id` int (11) NEM NULL, ELSŐDLEGES KULCS (` alkalmazott_id`, `projekt_id`), KEY` projekt_id` (`projekt_id`), KORLÁTOZÁS worker_project_ibfk_1` KÜLFÖLDI KULCS (`alkalmazott_id`) HIVATKOZÁSOK` alkalmazott` (`alkalmazott_id`), KORLÁTOZÁS` worker_project_ibfk_2` KÜLFÖLD KULCS (`projekt_id`) REFERENCIÁK` projekt` (`project_id`) ENGINE = InnoDB DEFAULT; 

Az adatbázis felállításával a következő lépés a Maven-függőségek és a hibernált konfiguráció előkészítése lenne. Erről tájékozódjon a Útmutató a hibernáláshoz4 tavasszal című cikkből

4. A modellosztályok

A modellosztályok Munkavállaló és Projekt JPA-jelölésekkel kell létrehozni:

@Entity @Table (name = "Employee") public class Employee {// ... @ManyToMany (cascade = {CascadeType.ALL}) @JoinTable (name = "Employee_Project", joinColumns = {@JoinColumn (name = "worker_id") ")}, inverseJoinColumns = {@JoinColumn (name =" project_id ")}} Projektek beállítása = new HashSet (); // szabványos kivitelező / szerelők / beállítók}
@Entity @Table (name = "Project") public class Projekt {// ... @ManyToMany (mappedBy = "projektek") private Set alkalmazottak = new HashSet (); // szabványos kivitelezők / szerelők / beállítók}

Ahogy látjuk, mind a Munkavállaló osztály és Projekt osztályok egymásra utalnak, ami azt jelenti, hogy a köztük lévő asszociáció kétirányú.

A sok-sok társulás feltérképezéséhez a @ManyToMany, @JoinTable és @JoinColumn annotációk. Nézzük meg közelebbről őket.

A @ManyToMany az annotációt mindkét osztályban használják az entitások közötti sok-sok-sok kapcsolat létrehozására.

Ennek az asszociációnak két oldala van, vagyis a tulajdonosa és a fordított oldala. Példánkban a tulajdonos oldal az Munkavállaló így a csatlakozási táblázatot a tulajdonos oldalon adjuk meg a @JoinTable annotáció Munkavállaló osztály. A @JoinTable a csatolás / összekapcsolás táblázat definiálására szolgál. Ebben az esetben az Employee_Project.

A @JoinColumn az annotáció segítségével megadhatjuk az összekapcsolás / összekapcsolás oszlopot a fő táblával. Itt a csatlakozás oszlop munkavállalói azonosító és project_id a fordított összekapcsolási oszlop Projekt a kapcsolat fordított oldalán áll.

Ban,-ben Projekt osztály, az feltérképezve attribútumot a @ManyToMany felirat annak jelzésére, hogy a alkalmazottak gyűjteményét a projektek a tulajdonos oldali gyűjtemény.

5. Végrehajtás

Annak érdekében, hogy a sok-sok kommentár működésben legyen, megírhatjuk a következő JUnit-tesztet:

nyilvános osztály HibernateManyToManyAnnotationMainIntegrationTest {privát statikus SessionFactory sessionFactory; privát ülésszak; // ... @Test public void givenData_whenInsert_thenCreatesMtoMrelationship () {String [] workerData = {"Peter Oven", "Allan Norman"}; Karakterlánc [] projectData = {"IT projekt", "Hálózati projekt"}; Projektek beállítása = új HashSet (); for (String proj: projectData) {projects.add (új Project (proj)); } for (String emp: workerData) {Alkalmazott alkalmazott = new Employee (emp.split ("") [0], emp.split ("") [1]); assertEquals (0, alkalmazott.getProjects (). méret ()); worker.setProjects (projektek); munkamenet.ellenőr (alkalmazott); assertNotNull (alkalmazott); }} @Test public void givenSession_whenRead_thenReturnsMtoMdata () {@SuppressWarnings ("bejelöletlen") List workerList = session.createQuery ("FROM Employee") .list (); assertNotNull (workerList); for (Munkavállalói alkalmazott: alkalmazottLista) {assertNotNull (alkalmazott.getProjects ()); }} // ...}

Láthatjuk a sok-sok kapcsolatot az adatbázisban létrehozott két entitás között: a munkavállaló, projekt, és alkalmazott_projekt táblázatok a kapcsolatot reprezentáló minta adatokkal.

6. Következtetés

Ebben az oktatóanyagban azt láttuk, hogyan hozhat létre hozzárendeléseket a Hibernate sok-sok kommentárjának felhasználásával, ami kényelmesebb megfelelője az XML-leképezési fájlok létrehozásához képest.

Az oktatóanyag forráskódja megtalálható a GitHub oldalon.


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