שינה מדריך הערות רבים עד רבים

1. הקדמה

במדריך מהיר זה, נבחן במהירות כיצד @ManyToMany ניתן להשתמש בביאור לציון סוג זה של מערכות יחסים במצב שינה.

2. דוגמה אופיינית

נתחיל בתרשים פשוט של יחסי ישות - המציג את הקשר בין רבים לרבים בין שתי ישויות עוֹבֵד ו פּרוֹיֶקט:

בתרחיש זה, כל נתון עוֹבֵד ניתן להקצות למספר פרויקטים ו- פּרוֹיֶקט ייתכן שעובדים מרובים עובדים עבורו, מה שמוביל לקשר בין רבים לרבים.

יש לנו עוֹבֵד שולחן עם תג עובד כמפתח העיקרי שלו ו- פּרוֹיֶקט שולחן עם project_id כמפתח העיקרי שלה. שולחן הצטרפות עובד_פרויקט נדרש כאן לחיבור שני הצדדים.

3. הגדרת מסד נתונים

נניח שיש לנו מסד נתונים שכבר נוצר עם השם אביב_הירד_רבים_רבים.

אנחנו גם צריכים ליצור את עוֹבֵד ו פּרוֹיֶקט שולחנות יחד עם עובד_פרויקט הצטרף לשולחן עם תג עובד ו project_id כמפתחות זרים:

צור טבלה 'עובד' ('עובד_יד' int (11) לא NULL AUTO_INCREMENT, 'שם פרטי' varchar (50) ערך NULL, 'שם משפחה' varchar (50) ערך NULL, מפתח ראשוני ('עובד_id')) מנוע = InnoDB AUTO_INCREMENT = 17 CHARSET ברירת מחדל = utf8; צור טבלה 'פרויקט' ('project_id' int (11) NOT NULL AUTO_INCREMENT, `title` varchar (50) DEFAULT NULL, PRIMARY KEY (` project_id`)) MOTOR = InnoDB AUTO_INCREMENT = 18 ערך תקין = utf8; צור טבלה 'עובד_פרויקט' ('עובד_איד' int (11) לא אפס, 'פרויקט_איד' int (11) לא אפס, מפתח ראשי ('עובד_איד', 'פרויקט_איד'), מפתח 'פרויקט_איד' ('פרויקט_איד'), CONSTRAINT ' עובד_project_ibfk_1` מפתח חוץ (`עובד_איד ') הפניות לעובד (' עובד_יד '), CONSTRAINT' עובד_פרויקט_יבפק_2 'מפתח חוץ (' פרויקט_יד ') הפניות' פרויקט '(' פרויקט_יד ')) מנוע = InnoDB ערך תקן; 

עם הגדרת מסד הנתונים, השלב הבא יהיה הכנת תלות Maven ותצורת מצב שינה. למידע על כך, עיין במאמר בנושא מדריך ללינה 4 עם אביב

4. שיעורי הדוגמניות

שיעורי המודל עוֹבֵד ו פּרוֹיֶקט צריך ליצור עם הערות JPA:

@Entity @Table (name = "עובד") עובד בכיתה ציבורית {// ... @ManyToMany (cascade = {CascadeType.ALL}) @JoinTable (name = "Employee_Project", joinColumn = {@JoinColumn (name = "עובד_איד) ")}, inverseJoinColumn = {@JoinColumn (name =" project_id ")}) הגדר פרויקטים = HashSet חדש (); // קונסטרוקטור סטנדרטי / גטרים / סטרים}
@Entity @Table (name = "Project") פרויקט מחלקה ציבורית {// ... @ManyToMany (mappedBy = "projects") פרטי סט עובדים = חדש HashSet (); // בונים סטנדרטיים / גטרים / סטרים}

כמו שאנו יכולים לראות, גם ה עוֹבֵד כיתה ו פּרוֹיֶקט שיעורים מתייחסים זה לזה, מה שאומר שהקשר ביניהם הוא דו כיווני.

על מנת למפות עמותה של רבים-רבים אנו משתמשים ב- @ManyToMany, @JoinTable ו @JoinColumn ביאורים. בואו נסתכל עליהם מקרוב.

ה @ManyToMany ההערה משמשת בשני המחלקות ליצירת הקשר בין רבים לישויות.

לאסוציאציה זו שני צדדים כלומר הצד שבבעלות והצד ההפוך. בדוגמה שלנו, הצד הבעלים הוא עוֹבֵד אז טבלת ההצטרפות מוגדרת בצד הבעלות באמצעות @JoinTable ביאור ב עוֹבֵד מעמד. ה @JoinTable משמש להגדרת טבלת ההצטרפות / קישור. במקרה זה, כן עובד_פרויקט.

ה @JoinColumn ביאור משמש כדי לציין את עמודת ההצטרפות / קישור עם הטבלה הראשית. הנה, עמודת ההצטרפות היא תג עובד ו project_id הוא עמוד ההצטרפות ההפוך מאז פּרוֹיֶקט נמצא בצד ההפוך של היחסים.

בתוך ה פּרוֹיֶקט הכיתה, ה ממופה על ידי התכונה משמשת ב- @ManyToMany ביאור כדי לציין כי עובדים האוסף ממופה על ידי פרויקטים אוסף של צד הבעלים.

5. ביצוע

על מנת לראות את ההערה הרבים-רבים בפעולה, אנו יכולים לכתוב את מבחן ה- JUnit הבא:

כיתה ציבורית HibernateManyToManyAnnotationMainIntegrationTest {SessionFactory sessionFactory פרטי סטטי; מושב מושב פרטי; // ... @ מבט בטל פומבי givenData_whenInsert_thenCreatesMtoMrelationship () {String [] employeeData = {"פיטר אובן", "אלן נורמן"}; מחרוזת [] projectData = {"פרויקט IT", "פרויקט רשת"}; הגדר פרויקטים = HashSet חדש (); עבור (String proj: projectData) {projects.add (פרויקט חדש (proj)); } עבור (מחרוזת emp: employeeData) {עובד שכיר = עובד חדש (emp.split ("") [0], emp.split ("") [1]); assertEquals (0, employee.getProjects (). size ()); employee.setProjects (פרויקטים); session.persist (עובד); assertNotNull (עובד); }} @ מבחן חלל ציבורי givenSession_whenRead_thenReturnsMtoMdata () {@SuppressWarnings ("לא מסומן") רשימת EmployList = session.createQuery ("FROM Employee") .list (); assertNotNull (רשימת עובדים); עבור (עובד שכיר: עובד רשימה) {assertNotNull (עובד. getProjects ()); }} // ...}

אנו יכולים לראות את הקשר בין רבים לרבים בין שתי הישויות שנוצרו במסד הנתונים: ה- עוֹבֵד, פּרוֹיֶקט, ו עובד_פרויקט טבלאות עם נתוני דוגמה המייצגים את הקשר.

6. מסקנה

במדריך זה ראינו כיצד ליצור מיפויים באמצעות ההערות הרבות-רבות של Hibernate, המהווה עמית נוח יותר בהשוואה ליצירת קבצי מיפוי XML.

את קוד המקור של הדרכה זו ניתן למצוא באתר GitHub.


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